Android——xml文件的解析

简介:

解析方法:DOM、SAX、PULL

  1. DOM:将xml转化为树进行遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public  void  DOMParser() {
     try  {
       // 1.创建DocumentBuilder实例
       DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        // 2.创建Document实例
     Document doc = builder.parse(file);
     // 3.获取xml文件的根节点(persons)
     Element element = doc.getDocumentElement();
     // 4.获取根节点的子节点列表(person的列表)
     NodeList personList = element.getElementsByTagName( "person" ); // TODO
     // NodeList personList = element.getChildNodes();//这个方法不行
     // 5. 遍历所有的person节点
     for  ( int  i =  0 ; i < personList.getLength(); i++) {
     // 6.获取单个person节点
     Element person = (Element) personList.item(i);
     // 7.读取person的属性
     String id = person.getAttribute( "id" );
     System.out.println( "person   id: "  + id);
     // 8.获取person的子节点列表
     NodeList childList = person.getChildNodes();
     // 9.遍历person子节点
     for  ( int  j =  0 ; j < childList.getLength(); j++) {
             // 10.访问子节点
         Node child = (Node) childList.item(j);
         if  (child.getNodeType() == Node.ELEMENT_NODE) { // 如果子节点是一个元素节点
         // 11.获取元素名称
         String name = child.getNodeName();
         if  ( "name" .equals(name)) { // 获取person name
             System.out.println( "名字: "
                 + child.getFirstChild().getNodeValue());
         else  if  ( "age" .equals(name)) { // 获取person age
             System.out.println( "年龄:"
                 + child.getFirstChild().getNodeValue());
                         }
                     }
                 }
             }
         catch  (ParserConfigurationException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         catch  (SAXException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         catch  (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
 
     }

2.SAX:从上往下挨个遍历标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// 1.创建一个Handler类,继承DefaultHandler
     class  SaxHandler  extends  DefaultHandler {
 
         /** 上一个节点名称 */
         private  String tag;
 
         // 需要重写五个方法:
         // 1.startDocument():开始文档时做预处理
         // 2.endDocument():结束文档时做善后处理
         // 3.startElement():遇到开始标签是调用该方法
         // 4.endElement():遇到结束标签时调用该方法
         // 5.characters():内容
 
         public  void  startDocument()  throws  SAXException {
             System.out.println( "调用startDocument()方法" );
         }
 
         public  void  endDocument()  throws  SAXException {
             System.out.println( "调用endDocument()方法" );
         }
 
         // 在该方法中读取标签的属性
         public  void  startElement(String uri, String localName, String qName,
                 Attributes attributes)  throws  SAXException {
             System.out.println( "调用startElement()方法" + "localName:" +localName+ "qName:" +qName);
             if  ( "person" .equals(qName)) {
                 System.out.println( "person:       " );
                 System.out.println( "     id: "  + attributes.getValue( "id" ));
             }
             tag = qName;
         }
 
         public  void  endElement(String uri, String localName, String qName)
                 throws  SAXException {
             System.out.println( "调用endElement()方法" );
         }
 
         // 读取标签内容
         // 每次都开始结束标签时都调用
         public  void  characters( char [] ch,  int  start,  int  length)
                 throws  SAXException {
 
             System.out.println( "调用characters()方法" );
 
             String data =  new  String(ch, start, length);
             if  ( "name" .equals(tag)) {
                 System.out.println( "name: "  + data);
             else  if  ( "age" .equals(tag)) {
                 System.out.println( "age: "  + data);
             }
         }
     }
 
     // 2.sax 解析
     public  void  SAXParser() {
         try  {
             //2.1创建解析器
             javax.xml.parsers.SAXParser parser = SAXParserFactory.newInstance()
                     .newSAXParser();
             //2.2创建处理器
             SaxHandler handler =  new  SaxHandler();
             //2.3创建文件输入流
             FileInputStream fis =  new  FileInputStream(file);
             //2.4解析文件
             parser.parse(file, handler);
         catch  (FileNotFoundException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         catch  (ParserConfigurationException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         catch  (SAXException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         catch  (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }

3.Pull:与SAX类似,在android开发中应用较多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public  static  void  xmlPullParser(InputStream is) {
 
         try  {
             // 1.获取输入流
             // 2.获取解析器
             XmlPullParser parser = Xml.newPullParser();
             parser.setInput(is,  "utf-8" );
             // 3.获取事件类型
             int  eventType = parser.getEventType();
             // 4.遍历节点
             while (eventType != XmlPullParser.END_DOCUMENT){
                 switch  (eventType) {
                 case  XmlPullParser.START_DOCUMENT: //文件开启
                     break ;
                 case  XmlPullParser.START_TAG: //标签开始
                     //4.1获取节点名称
                     String name = parser.getName();
                     if (name.equals( "person" )){
                         //4.2 获取节点属性值
                         String id = parser.getAttributeValue( 0 );
                     } else  if (name.equals( "name" )){
                         //4.3 获取下个文本值
                         System.out.println( "name: " + parser.nextText());
                     } else  if (name.equals( "age" )){
                         System.out.println( "age: " + parser.nextText());
                     }
                     break ;
                 case  XmlPullParser.END_TAG: //标签结束
                     
                     break ;
 
                 default :
                     break ;
                 }
                 
                 eventType = parser.next();
             }
             
             is.close();
         catch  (FileNotFoundException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         catch  (XmlPullParserException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         catch  (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
 
     }















本文转自wauoen51CTO博客,原文链接:http://blog.51cto.com/7183397/1606124  ,如需转载请自行联系原作者


相关文章
|
3天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
15 1
|
3天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
11 0
|
15天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
17 0
|
17天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
3天前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
32 1
|
3天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
20 1
|
3天前
|
Android开发
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
2 0
|
3天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
7天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
15 1
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0

推荐镜像

更多