数据解析1:XML解析(3)

  XML解析的第二种方法是PULL解析

  PULL解析是以事件常量的的方法进行解析,何为事件常量

  当解析器从头到尾解析XML文件时,解析到文档开头定义为解析到一个常量XmlPullParser.START_DOCUMENT,当解析到开始标签定义为解析到一个常量XmlPullParser.START_TAG,当解析到结束标签定义为解析到一个常量XmlPullParser.END_TAG,当解析到文档结尾定义为解析到一个常量XmlPullParser.END_DOCUMENT。

  下面是PULL解析的过程:

  PULL解析的核心过程:

 1 public class PullPaser1 {
 2
 3     public List<Person> pullParser() throws XmlPullParserException, IOException
 4     {
 5         List<Person> list = null;
 6         Person  person = null;
 7
 8         //1.创建解析器工厂对象
 9         XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
10         //2.创建解析器对象
11         XmlPullParser parser = factory.newPullParser();
12         //3.创建读取被解析的文件的字符读取流
13         //FileReader fileReader = new FileReader("user.xml");
14         FileInputStream fis = new FileInputStream("user.xml");
15         parser.setInput(fis, "utf-8");//可以设置编码
16         //得到解析时返回的第一个编号
17         int event = parser.getEventType();
18
19         //4.具体的解析过程
20         while(event!=XmlPullParser.END_DOCUMENT)
21         {
22             switch(event)
23             {
24                 case XmlPullParser.START_DOCUMENT:
25                     list = new ArrayList<Person>();break;
26                 case XmlPullParser.START_TAG:
27                     String tagName = parser.getName();//得到开始标签名称
28                     if("person".equals(tagName))
29                     {
30                         person = new Person();
31                     }
32                     else if("name".equals(tagName))
33                         person.setName(parser.nextText());//获取开始标签后边的数据
34                     else if("age".equals(tagName))
35                         person.setAge(Integer.parseInt(parser.nextText()));
36                     else if("sex".equals(tagName))
37                         person.setSex(parser.nextText());
38                     break;
39                 case XmlPullParser.END_TAG:
40                     if("person".equals(parser.getName()))
41                     {
42                         list.add(person);
43                     }
44                     break;
45             }
46             //获取下一个编号
47             event = parser.next();
48         }
49         return list;
50     }
51
52 }

  观察上面代码可知:PULL解析核心的过程和SAX解析很相似,对于SAX解析,是以事件通知的方法,即解析不同部分,调用不同的方法,而对于PULL解析,是以事件常量的方法,即解析不同部分,认为是不同的常量加以区分,执行不同的操作,而它们都需要先创建一个解析工厂,通过工厂来获取一个解析器对象。

  

  PULL解析的步骤

  1.获取PULL解析的工厂实例

    XmlPullParserFactory factory =XmlPullParserFactory.newInstance();

  2.通过工厂实例,获取PULL解析器对象

    XmlPullParser parser = factory.newPullParser();

  3.创建读取xml文件的流(若xml文件是本地),设置编码   

    FileInputStream fis = new FileInputStream("user.xml");
    parser.setInput(fis, "utf-8");//可以设置编码

  4.获取第一个事件常量,然后循环解析XML文件

     int event = parser.getEventType();   

     while(event!=XmlPullParser.END_DOCUMENT)
     {
      switch(event)
      {
        case XmlPullParser.START_DOCUMENT:

           ...
            break;
        case XmlPullParser.START_TAG:
            String tagName = parser.getName();//得到开始标签名称

            ....
            break;
        case XmlPullParser.END_TAG:

            ....
            break;
        }
       //获取下一个编号
      event = parser.next();
    }

  示例1:采用PULL解析user.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <persons>
 3     <person>
 4         <name>张三</name>
 5         <age>30</age>
 6         <sex>男</sex>
 7     </person>
 8
 9     <person>
10         <name>李四</name>
11         <age>32</age>
12         <sex>女</sex>
13     </person>
14
15     <person>
16         <name>王五</name>
17         <age>30</age>
18         <sex>男</sex>
19     </person>
20 </persons>

user.xml

 1 package com.qianfeng.pull1;
 2
 3 public class Person {
 4
 5     private String name;
 6     private int age;
 7     private String sex;
 8
 9     public Person(){}
10
11     public Person(String name, int age, String sex) {
12         super();
13         this.name = name;
14         this.age = age;
15         this.sex = sex;
16     }
17
18     public String getName() {
19         return name;
20     }
21
22     public void setName(String name) {
23         this.name = name;
24     }
25
26     public int getAge() {
27         return age;
28     }
29
30     public void setAge(int age) {
31         this.age = age;
32     }
33
34     public String getSex() {
35         return sex;
36     }
37
38     public void setSex(String sex) {
39         this.sex = sex;
40     }
41
42     @Override
43     public String toString() {
44         return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
45     }
46
47
48
49 }

Person.java

 1 package com.qianfeng.pull1;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileReader;
 6 import java.io.IOException;
 7 import java.util.ArrayList;
 8 import java.util.List;
 9
10 import org.xmlpull.v1.XmlPullParser;
11 import org.xmlpull.v1.XmlPullParserException;
12 import org.xmlpull.v1.XmlPullParserFactory;
13
14 public class PullPaser1 {
15
16     public List<Person> pullParser() throws XmlPullParserException, IOException
17     {
18         List<Person> list = null;
19         Person  person = null;
20
21         //创建解析器工厂对象
22         XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
23         //创建解析器对象
24         XmlPullParser parser = factory.newPullParser();
25         //创建读取被解析的文件的字符读取流
26         //FileReader fileReader = new FileReader("user.xml");
27         FileInputStream fis = new FileInputStream("user.xml");
28         parser.setInput(fis, "utf-8");//可以设置编码
29         //得到解析时返回的第一个编号
30         int event = parser.getEventType();
31
32         while(event!=XmlPullParser.END_DOCUMENT)
33         {
34             switch(event)
35             {
36                 case XmlPullParser.START_DOCUMENT:
37                     list = new ArrayList<Person>();break;
38                 case XmlPullParser.START_TAG:
39                     String tagName = parser.getName();//得到开始标签名称
40                     if("person".equals(tagName))
41                     {
42                         person = new Person();
43                     }
44                     else if("name".equals(tagName))
45                         person.setName(parser.nextText());//获取开始标签后边的数据
46                     else if("age".equals(tagName))
47                         person.setAge(Integer.parseInt(parser.nextText()));
48                     else if("sex".equals(tagName))
49                         person.setSex(parser.nextText());
50                     break;
51                 case XmlPullParser.END_TAG:
52                     if("person".equals(parser.getName()))
53                     {
54                         list.add(person);
55                     }
56                     break;
57             }
58             //获取下一个编号
59             event = parser.next();
60         }
61         return list;
62     }
63
64 }

PullPaser1

 1 package com.qianfeng.pull1;
 2
 3 import java.io.IOException;
 4 import java.util.List;
 5
 6 import org.xmlpull.v1.XmlPullParser;
 7 import org.xmlpull.v1.XmlPullParserException;
 8
 9 public class Test {
10
11     /**
12      * @param args
13      * @throws IOException
14      * @throws XmlPullParserException
15      */
16     public static void main(String[] args) throws XmlPullParserException, IOException {
17 //        System.out.println(XmlPullParser.START_DOCUMENT);
18 //        System.out.println(XmlPullParser.START_TAG);
19 //        System.out.println(XmlPullParser.TEXT);
20 //        System.out.println(XmlPullParser.END_TAG);
21 //        System.out.println(XmlPullParser.END_DOCUMENT);
22
23
24         PullPaser1 pullParser1 = new PullPaser1();
25         List<Person> list = pullParser1.pullParser();
26
27         for(Person person:list)
28         {
29             System.out.println(person);
30         }
31
32     }
33
34 }

Test.java

  示例2:采用PULL解析worker.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <workers>
 3     <worker id="AQ01">
 4         <name>Mark</name>
 5         <sex>男</sex>
 6         <status>经理</status>
 7         <address>北京</address>
 8         <money>4000</money>
 9     </worker>
10     <worker id="AD02">
11         <name>Luch</name>
12         <sex>女</sex>
13         <status>员工</status>
14         <address>上海</address>
15         <money>1000</money>
16     </worker>
17     <worker id="AD03">
18         <name>Lily</name>
19         <sex>女</sex>
20         <status>员工</status>
21         <address>北京</address>
22         <money>2000</money>
23     </worker>
24     <worker>
25         <name>Lily</name>
26         <sex>女</sex>
27         <status>员工</status>
28         <address>北京</address>
29         <money>2000</money>
30     </worker>
31 </workers>

worker.xml

 1 package com.qianfeng.pull2;
 2
 3 public class Worker {
 4
 5      private String id;
 6      private String name;
 7      private char sex;
 8      private String status;
 9      private String address;
10      private double money;
11
12      public Worker(){}
13
14     public Worker(String id, String name, char sex, String status,
15             String address, double money) {
16         super();
17         this.id = id;
18         this.name = name;
19         this.sex = sex;
20         this.status = status;
21         this.address = address;
22         this.money = money;
23     }
24
25     public String getId() {
26         return id;
27     }
28
29     public void setId(String id) {
30         this.id = id;
31     }
32
33     public String getName() {
34         return name;
35     }
36
37     public void setName(String name) {
38         this.name = name;
39     }
40
41     public char getSex() {
42         return sex;
43     }
44
45     public void setSex(char sex) {
46         this.sex = sex;
47     }
48
49     public String getStatus() {
50         return status;
51     }
52
53     public void setStatus(String status) {
54         this.status = status;
55     }
56
57     public String getAddress() {
58         return address;
59     }
60
61     public void setAddress(String address) {
62         this.address = address;
63     }
64
65     public double getMoney() {
66         return money;
67     }
68
69     public void setMoney(double money) {
70         this.money = money;
71     }
72
73     @Override
74     public String toString() {
75         return "Worker [id=" + id + ", name=" + name + ", sex=" + sex
76                 + ", status=" + status + ", address=" + address + ", money="
77                 + money + "]";
78     }
79
80
81
82 }

Worker.java

 1 package com.qianfeng.pull2;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.IOException;
 6 import java.util.ArrayList;
 7 import java.util.List;
 8
 9 import org.xmlpull.v1.XmlPullParser;
10 import org.xmlpull.v1.XmlPullParserException;
11 import org.xmlpull.v1.XmlPullParserFactory;
12
13 public class PullParser2 {
14
15     public List<Worker> pullParser() throws XmlPullParserException, IOException
16     {
17         List<Worker> list = null;
18         Worker worker = null;
19
20         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
21         XmlPullParser parser = factory.newPullParser();
22
23         FileInputStream fis = new FileInputStream("worker.xml");
24
25         parser.setInput(fis, "utf-8");
26
27         int event = parser.getEventType();
28
29         while(event!=XmlPullParser.END_DOCUMENT){
30             switch(event)
31             {
32             case XmlPullParser.START_DOCUMENT:
33                 list = new ArrayList<Worker>();
34                 break;
35             case XmlPullParser.START_TAG:
36                 String tagName = parser.getName();
37                 if("worker".equals(tagName))
38                 {
39                     worker = new Worker();
40                     int count = parser.getAttributeCount();//得到属性数量
41                     for(int i=0;i<count;i++)
42                     {
43                         //得到属性名
44                         String attrName = parser.getAttributeName(i);
45                         //得到属性值
46                         String attrValue = parser.getAttributeValue(i);
47
48                         if("id".equals(attrName))
49                         {
50                             worker.setId(attrValue);
51                         }
52                     }
53                 }
54                 else if("name".equals(tagName))
55                     worker.setName(parser.nextText());
56                 else if("sex".equals(tagName))
57                     worker.setSex(parser.nextText().charAt(0));
58                 else if("status".equals(tagName))
59                     worker.setStatus(parser.nextText());
60                 else if("address".equals(tagName))
61                     worker.setAddress(parser.nextText());
62                 else if("money".equals(tagName))
63                     worker.setMoney(Double.parseDouble(parser.nextText()));
64                 break;
65             case XmlPullParser.END_TAG:
66                 if("worker".equals(parser.getName()))
67                 {
68                     list.add(worker);
69                 }
70                 break;
71
72             }
73             event = parser.next();
74         }
75
76         return list;
77     }
78
79 }

PullParser2

 1 package com.qianfeng.pull2;
 2
 3 import java.io.IOException;
 4 import java.util.List;
 5
 6 import org.xmlpull.v1.XmlPullParserException;
 7
 8 public class Test {
 9
10     /**
11      * @param args
12      * @throws IOException
13      * @throws XmlPullParserException
14      */
15     public static void main(String[] args) throws XmlPullParserException, IOException {
16
17         PullParser2  pullParser2 = new PullParser2();
18
19         List<Worker> list = pullParser2.pullParser();
20
21         for(Worker worker:list)
22         {
23             System.out.println(worker);
24         }
25
26     }
27
28 }

Test.java

  示例3:上次采用了SAX解析了citys_weather.xml,这次用PULL解析比较复杂的xml文件

  citys_weather.xml文件见上篇数据解析1:XML解析(2)

 1 package com.qianfeng.pull4;
 2
 3 import java.util.List;
 4
 5 public class Province {
 6
 7     private String id;
 8     private String name;
 9     private List<City> citys;
10
11     public Province(){}
12
13     public Province(String id, String name, List<City> citys) {
14         super();
15         this.id = id;
16         this.name = name;
17         this.citys = citys;
18     }
19
20     public String getId() {
21         return id;
22     }
23
24     public void setId(String id) {
25         this.id = id;
26     }
27
28     public String getName() {
29         return name;
30     }
31
32     public void setName(String name) {
33         this.name = name;
34     }
35
36     public List<City> getCitys() {
37         return citys;
38     }
39
40     public void setCitys(List<City> citys) {
41         this.citys = citys;
42     }
43
44     @Override
45     public String toString() {
46         return name;
47     }
48
49
50
51
52 }

Province.java

 1 package com.qianfeng.pull4;
 2
 3 import java.util.List;
 4
 5 public class City {
 6
 7     private String id;
 8     private String name;
 9     private List<District> districts;
10
11     public City(){}
12
13     public City(String id, String name, List<District> districts) {
14         super();
15         this.id = id;
16         this.name = name;
17         this.districts = districts;
18     }
19
20     public String getId() {
21         return id;
22     }
23
24     public void setId(String id) {
25         this.id = id;
26     }
27
28     public String getName() {
29         return name;
30     }
31
32     public void setName(String name) {
33         this.name = name;
34     }
35
36     public List<District> getDistricts() {
37         return districts;
38     }
39
40     public void setDistricts(List<District> districts) {
41         this.districts = districts;
42     }
43
44     @Override
45     public String toString() {
46         return name;
47     }
48
49
50
51 }

City.java

 1 package com.qianfeng.pull4;
 2
 3 public class District {
 4
 5     private String id;
 6     private String name;
 7
 8     public District(){}
 9
10     public District(String id, String name) {
11         super();
12         this.id = id;
13         this.name = name;
14     }
15
16     public String getId() {
17         return id;
18     }
19
20     public void setId(String id) {
21         this.id = id;
22     }
23
24     public String getName() {
25         return name;
26     }
27
28     public void setName(String name) {
29         this.name = name;
30     }
31
32     @Override
33     public String toString() {
34         return name;
35     }
36
37
38
39 }

District.java

  1 package com.qianfeng.pull4;
  2
  3 import java.io.FileInputStream;
  4 import java.io.FileNotFoundException;
  5 import java.io.IOException;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8
  9 import org.xmlpull.v1.XmlPullParser;
 10 import org.xmlpull.v1.XmlPullParserException;
 11 import org.xmlpull.v1.XmlPullParserFactory;
 12
 13 public class PullParser4 {
 14
 15     public List<Province> pullParser() throws XmlPullParserException, IOException
 16     {
 17         List<Province> provinces = null;
 18         Province province = null;
 19         List<City> citys = null;
 20         City city = null;
 21         List<District> districts = null;
 22         District district = null;
 23
 24         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
 25         XmlPullParser parser = factory.newPullParser();
 26
 27         FileInputStream fis = new FileInputStream("citys_weather.xml");
 28
 29         parser.setInput(fis, "utf-8");
 30         int event = parser.getEventType();
 31         while(event!=XmlPullParser.END_DOCUMENT)
 32         {
 33             switch(event)
 34             {
 35             case XmlPullParser.START_DOCUMENT:
 36                 provinces = new ArrayList<Province>();break;
 37             case XmlPullParser.START_TAG:
 38                 String tagName = parser.getName();
 39                 if("p".equals(tagName))
 40                 {
 41                     province = new Province();
 42                     citys = new ArrayList<City>();
 43                     int count = parser.getAttributeCount();
 44                     for(int i=0;i<count;i++)
 45                     {
 46                         String attrName = parser.getAttributeName(i);
 47                         String attrValue = parser.getAttributeValue(i);
 48                         if("p_id".equals(attrName))
 49                         {
 50                             province.setId(attrValue);
 51                         }
 52                     }
 53                 }
 54                 if("pn".equals(tagName))
 55                     province.setName(parser.nextText());
 56                 if("c".equals(tagName))
 57                 {
 58                     city = new City();
 59                     districts = new ArrayList<District>();
 60                     int count = parser.getAttributeCount();
 61                     for(int i=0;i<count;i++)
 62                     {
 63                         String atrrName = parser.getAttributeName(i);
 64                         String attrValue = parser.getAttributeValue(i);
 65                         if("c_id".equals(atrrName))
 66                             city.setId(attrValue);
 67                     }
 68                 }
 69                 if("cn".equals(tagName))
 70                     city.setName(parser.nextText());
 71                 if("d".equals(tagName))
 72                 {
 73                     district = new District();
 74                     int count = parser.getAttributeCount();
 75                     for(int i=0;i<count;i++)
 76                     {
 77                         String atrrName = parser.getAttributeName(i);
 78                         String attrValue = parser.getAttributeValue(i);
 79                         if("d_id".equals(atrrName))
 80                             district.setId(attrValue);
 81                     }
 82                     district.setName(parser.nextText());
 83                     districts.add(district);
 84                 }
 85                 break;
 86             case XmlPullParser.END_TAG:
 87                 if("c".equals(parser.getName()))
 88                 {
 89                     city.setDistricts(districts);
 90                     citys.add(city);
 91                 }
 92                 if("p".equals(parser.getName()))
 93                 {
 94                     province.setCitys(citys);
 95                     provinces.add(province);
 96                 }
 97                 break;
 98             }
 99             event = parser.next();
100         }
101         return provinces;
102     }
103
104 }

PullParser4

 1 package com.qianfeng.pull4;
 2
 3 import java.io.IOException;
 4 import java.util.List;
 5
 6 import org.xmlpull.v1.XmlPullParserException;
 7
 8 public class Test {
 9
10     /**
11      * @param args
12      * @throws IOException
13      * @throws XmlPullParserException
14      */
15     public static void main(String[] args) throws XmlPullParserException, IOException {
16
17         PullParser4 pullParser4 = new PullParser4();
18
19         List<Province> list =pullParser4.pullParser();
20
21         for(int i=0;i<list.size();i++)
22         {
23             Province province = list.get(i);
24             System.out.println("省:"+province);
25             List<City> citys = province.getCitys();
26             for(int j=0;j<citys.size();j++)
27             {
28                 City city = citys.get(j);
29                 System.out.println("市===:"+city);
30                 List<District> districts = city.getDistricts();
31                 for(int k =0;k<districts.size();k++)
32                 {
33                     District district =districts.get(k);
34                     System.out.println("县=======:"+district);
35                 }
36             }
37         }
38
39
40
41     }
42
43 }

Test

  未完,待续。

时间: 2024-10-12 00:33:21

数据解析1:XML解析(3)的相关文章

数据解析1:XML解析(2)

上一篇着重记录了XML解析中的SAX解析,该篇继续上篇(数据解析1:XML解析(2))未讲完的内容. XML补充: 1. 2. . 3. 示例:使用SAX解析一个比较复杂的XML文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- START_DOCUMET:第一个节点 3 END_DOCUMET:尾节点 4 START_TAG:其他的首部的节点 p pn c cn... 5 END_TAG:其他的尾

数据解析1:XML解析(1)

Http网络传输中的数据组织格式主要有三种: 1.HTML方式 2.XML方式 3.JSON方式 其中XML方式的数据解析有三种:DOM解析,SAX解析,Pull解析. 下面主要讲解SAX解析. 因为SAX解析是解析XML格式的数据的,那么首先要大致了解下什么是XML,以及XML数据有什么特点. 下面是一个XML数据文件: 分析:XML文件和HTML文件很相似,都是由标签构成,但是XML比HTML更灵活,XML被称为可扩展性标记语言.其中第一行的是固定的格式,文件主体全部有双标签构成,且标签是自

iOS之数据解析之XML解析

XML解析常见的两种方式:DOM解析和SAX解析 DOM解析 DOM:Document Object Model(文档对象类型).解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历数结构可以检索任意XML节点,读取它的属性和值,而且通常情况下,可以借助XPath,直接查询XML节点. 进行DOM方式解析数据需要使用一个第三方的类GDataXMLNode GDataXMLNode是Google提供的开源XML解析类,对libxml2.tbd进行了Objective-C的

iOS网络数据解析之XML解析-GDataXML

GDataXML 第三方xml解析框架 DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件 GDataXML中常用的类 GDataXMLDocument: 代表整个XML文档 GDataXMLElement: 代表文档中的每个元素 使用attributeForName:方法可以获得属性值 要使用GDataXML,先要对项目进行一些配置.1>导入libxml2动态库targets--Build Phases--link Binary With Libraries 2>设置libxm

JSON解析和XML解析

一. XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架 经常用到的方法: 1.- (id)initWithXMLString:(NSString *)str options:(unsigned int)mask error:(NSError *)error 2.- (id)initWithData:(NSData *)data options:(unsigned int)mask error:(NSError *)error 这两个方法可

iOS网络编程开发—JSON解析与XML解析

一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的注意点:key必须用双引号 要想从

iOS中JSON解析和XML解析的区别

iOS中网络传输的格式可粗略的分为XML和JSON两种,具体的传输方式又可分为GET和POST. 其中XML格式是最早出现的,但是由于复杂,并且占用字节数相对较大,故不太适合移动端,后来简化为JSON格式. JSON本身的数据结构只有字典和数组两种,在IOS5以后出现了原生解析,而之前则有SBJson和JsonKit第三方库解析. SBJson和JsonKit的特点: 1.第三方库解析SBJson是所有解析效率里面最低的,之所以能够广泛普及,是因为其简单,封装的低耦合性,可以快速抽离出一个类,在

数据解析之XML和JSON

1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. XML数据结构 1> 概述 XML:Extensible markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. 2> XML数据格式的功能 数据交换 内容管理 用作配置文件 3> XML数据格式的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点

XML解析器

一.操作XML文档概述 1.如何操作XML文档 XML文档也是数据的一种,对数据的操作也不外乎是"增删改查".也被大家称之为"CRUD" C:Create: R:Retrieve: U:Update: D:Delete 2.XML解析技术 XML解析方式分为两种:DOM(Document Object Model)和SAX(Simple API for XML).这两种方式不是针对Java语言来解析XML的技术,而是跨语言的解析方式.例如DOM还在Javascrip