android xml 的解析

来源:互联网 发布:ios wkwebview js 编辑:程序博客网 时间:2024/05/16 19:24

android xml 的解析.

1.普通型

Xml代码  

1. <?xml version=”1.0″ ?>  

2. <statuses>  

3. <status>  

4. <source1>a</source1>  

5. <source2>a</source2>  

6. <source2>a</source2>  

7. </status>  

8. <statuses>  

9. </xml>  

 

解析代码.

Java代码  

1. try{  

2. xpp.setInput( new StringReader ( “xml string” ) );  

3. XmlPullParser parser = XmlPullParserFactory.newInstance()  

4. .newPullParser();  

5. int eventType = parser.getEventType();  

6. while (eventType != XmlPullParser.END_DOCUMENT) {  

7. if (eventType == XmlPullParser.START_TAG) {  

8. String name = parser.getName();  

9. Log.v(“tag”,parser.getName()+”=”+parser.next());  

10. }  

11. eventType = parser.next();  

12. }  

13. } catch (XmlPullParserException e) {  

14. } catch (Exception e) {  

15. }  

 

2.嵌套子类.

Xml代码  

1. <?xml version=”1.0″ encoding=”UTF-8″ standalone=”no”?>  

2. <statuses>  

3. <status>  

4.  <source1>a</source1>  

5.  <source2>a</source2>  

6.  <source2>a</source2>  

7.  <user>  

8.    <source1>a</source1>  

9.    <source2>a</source2>  

10.    <source2>a</source2>  

11.  </user>  

12. </status>  

13. <status>  

14.  <source1>a</source1>  

15.  <source2>a</source2>  

16.  <source2>a</source2>  

17.  <user>  

18.    <source1>a</source1>  

19.    <source2>a</source2>  

20.    <source2>a</source2>  

21.  </user>  

22. </status>  

23. <statuses>  

24. </xml>  

 

解析代码:

Java代码  

1. try{  

2. XmlPullParser parser = XmlPullParserFactory.newInstance()  

3. .newPullParser();  

4.  xpp.setInput( new StringReader ( xml string ) );  

5. parser.next();  

6. parser.require(XmlPullParser.START_TAG, null, “statuses”);  

7. while (parser.nextTag() != XmlPullParser.END_TAG) {  

8. parser.require(XmlPullParser.START_TAG, null, “status”);  

9. for (int i=0;i<3;i++){  

10. parser.nextTag();  

11. Log.v(“tag”,parser.getName()+”=”+ parser.nextText());  

12. }  

13. while (parser.nextTag() != XmlPullParser.END_TAG) {  

14. parser.require(XmlPullParser.START_TAG, null, “user”);  

15. while (parser.nextTag() != XmlPullParser.END_TAG) {  

16. String name = parser.getName();  

17. String text2 = parser.nextText();  

18. Log.v(“tag”,”text2″+text2);  

19. parser.require(XmlPullParser.END_TAG, null, name);  

20. }  

21. parser.require(XmlPullParser.END_TAG, null, “user”);  

22. }  

23. parser.require(XmlPullParser.END_TAG, null, “status”);  

24. }  

25. parser.require(XmlPullParser.END_TAG, null, “statuses”);  

26. parser.next();  

27. parser.require(XmlPullParser.END_DOCUMENT, null, null);  

28. // global.userinfo.dump();  

29. } catch (XmlPullParserException e) {  

30. } catch (Exception e) {  

31. }  

 

最里面那个可以满足 <user>也是循环. 如果<user>不循环.

可以使用.

Java代码  

1. for (int i=0;i<3;i++){  

2. parser.nextTag();  

3. Log.v(“tag”,parser.getName()+”=”+ parser.nextText());  

4. }  

 

代替.

 

 

 

 

 

Ø 读取XML格式文件

ü 首先通过调用资源对象的getXml()函数,获取到XML解析器XmlPullParser

ü XmlPullParserAndroid平台标准的XML解析器,这项技术来自一个开源的XML解析API项目XMLPULL

Ø ResourceFileDemo示例中关于读取XML文件的核心代码如下

Ø XmlPullParser parser = resources.getXml(R.xml.people);  

Ø String msg = "";

Ø try {

Ø  while (parser.next() != XmlPullParser.END_DOCUMENT) {

Ø  String people = parser.getName();

Ø  String name = null;

Ø                              String age = null;

Ø  String height = null;

Ø  if ((people != null) && people.equals("person")) {

Ø         int count = parser.getAttributeCount();

Ø         for (int i = 0; i < count; i++) {

Ø                  String attrName = parser.getAttributeName(i);

Ø                  String attrValue = parser.getAttributeValue(i);

Ø     if ((attrName != null) && attrName.equals("name")) {

Ø                 name = attrValue;

Ø     } else if ((attrName != null) && attrName.equals("age")) {

Ø                 age = attrValue;

Ø     } else if ((attrName != null) && attrName.equals("height")) {

Ø                  height = attrValue;

Ø                  }

Ø  }

22.                               if ((name != null) && (age != null) && (height != null)) {

23.                   msg += "姓名:"+name+",年龄:"+age+",身高:"+height+"\n";

24.                                }

25.            }

26.  }

27. } catch (Exception e) {

28.  Log.e("ResourceFileDemo", e.getMessage(), e);

29. }

30. displayView.setText(msg);

1. 1行代码通过资源对象的getXml()函数获取到XML解析器

2. 4行代码的parser.next()方法可以获取到高等级的解析事件,并通过对比确定事件类型

3. 5行代码使用getName()函数获得元素的名称

4. 10行代码使用getAttributeCount()函数获取元素的属性数量

 

ü 12行代码通过getAttributeName()函数得到属性名称

ü 14行到第19行代码通过分析属性名获取到正确的属性值

ü 23行代码将属性值整理成需要显示的信息

Ø XmlPullParserXML事件类型

事件类型

说明

START_TAG

读取到标签开始标志

TEXT

读取文本内容

END_TAG

读取到标签结束标志

END_DOCUMENT

文档末尾

0 0