xmlPullParser用法

来源:互联网 发布:数据库读写分离实现 编辑:程序博客网 时间:2024/06/02 02:50

原文链接:http://blog.csdn.net/chaoy1116/article/details/45224467

XML文件

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <persons  
  3.     xmlns:yd="http://www.china-mobile.com"  
  4.     xmlns:lt="http://www.china-unicome.com">  
  5.     some_content  
  6.     <person index="1">  
  7.         <name>yuanzhifei89</name><age>100</age><married>false</married>  
  8.         <!-- 移动号码 --><yd:phone yd:id="amj08102">12345678</yd:phone>  
  9.         <!-- 联通号码 --><lt:phone lt:id="cmk35203">87654321</lt:phone>  
  10.           
  11.         <![CDATA[&lt;&gt; <div>]]>&lt;  
  12.     </person>  
  13. </persons>  

解析代码

  1. // 创建xml解析器  
  2. XmlPullParser parser = mFactory.newPullParser();  
  3. parser.setInput(new FileReader(xmlFile));  
  4.   
  5. // 因为使用的xml涉及了命名空间,所以启用命名空间  
  6. parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);  
  7.   
  8. int eventType = 0;  
  9.   
  10. // xml和person间的IGNOREABLE_WHITESPACE  
  11. eventType = parser.nextToken();  
  12. parser.isWhitespace(); // IGNOREABLE_WHITESPACE总是为whitespace  
  13.   
  14. // 返回这两个前缀对应的命名空间uri,但此时还未解析到命名空间部分,所以均返回null  
  15. parser.getNamespace("lt");  
  16. parser.getNamespace("yd");  
  17.   
  18. // 起始标签<persons>  
  19. eventType = parser.nextToken();  
  20. parser.getAttributeCount(); // 0,persones标签没有属性  
  21.   
  22. // 命名空间已解析  
  23. parser.getNamespace("lt"); // http://www.china-unicome.com  
  24. parser.getNamespace("yd"); // http://www.china-mobile.comp  
  25.   
  26. // <persons>和<person>间的text(空白也算在text内容中)  
  27. eventType = parser.nextToken();  
  28. parser.isWhitespace(); // false,只要含有非空白字符就不是whitespace  
  29.   
  30. // 起始标签<person>  
  31. eventType = parser.nextToken();  
  32.   
  33. // <person>和<name>间的text  
  34. eventType = parser.nextToken();  
  35. parser.isWhitespace(); // true  
  36.   
  37. // 起始标签<name>  
  38. eventType = parser.nextToken();  
  39. parser.getLineNumber(); // 第7行  
  40. parser.getColumnNumber(); // 第9列  
  41.   
  42. // name标签中的text:yuanzhifei89  
  43. eventType = parser.nextToken();  
  44.   
  45. // 结束标签</name>  
  46. eventType = parser.nextToken();  
  47.   
  48. // 起始标签<age>  
  49. eventType = parser.nextToken();  
  50. parser.getNamespace(); // "",age没有命名空间  
  51. parser.isEmptyElementTag(); // false,age并不是<age/>这种空标签  
  52. parser.getDepth(); // 3,<persons>一层,<person>二层,到它就是三层  
  53. parser.getNamespaceCount(parser.getDepth()); // 2,到三层为止解析到了2个命名空间  
  54. // age标签中的text:100  
  55. eventType = parser.nextToken();  
  56. // 结束标签</age>  
  57. eventType = parser.nextToken();  
  58.   
  59. // 开始标签<married>  
  60. eventType = parser.nextToken();  
  61. // 标签married间的text:false  
  62. eventType = parser.nextToken();  
  63. // 结束标签</married>  
  64. eventType = parser.nextToken();  
  65.   
  66. // </married>和<!-- 之间的text  
  67. eventType = parser.nextToken();  
  68.   
  69. // COMMENT备注内容  
  70. eventType = parser.nextToken();  
  71.   
  72. // 开始标签<yd:phone>  
  73. eventType = parser.nextToken();  
  74. parser.getAttributeCount(); // 1,它有一个属性  
  75. parser.getNamespace(); // http://www.china-mobile.com,它是该命名空间下的元素  
  76. parser.getPrefix(); // yd,命名空间前缀是yd  
  77. parser.getAttributeName(0); // id,第1个属性的名称  
  78. parser.getAttributeNamespace(0); // http://www.china-mobile.com,属性也在该命名空间下  
  79. parser.getAttributePrefix(0); // yd,所以前缀也一样  
  80. parser.getAttributeValue(0); // amj08102,属性值  
  81. parser.getDepth(); // 3,和<age>一样,<persons>一层,<person>二层,到它是三层  
  82. parser.getNamespaceCount(parser.getDepth()); // 2,到三层为止解析到了2个命名空间  
  83. // 标签<yd:phone>间的text:12345678  
  84. eventType = parser.nextToken();  
  85. // 结束标签</yd:phone>  
  86. eventType = parser.nextToken();  
  87.   
  88. // </yd:phone>和<!--间的text  
  89. eventType = parser.nextToken();  
  90. parser.getName(); // phone,启用命名空间时返回phone;如果不启用会返回yd:phone  
  91.   
  92. // COMMENT 备注内容  
  93. eventType = parser.nextToken();  
  94. parser.getText(); // 备注内容  
  95.   
  96. // 开始标签<lt:phone>  
  97. eventType = parser.nextToken();  
  98. // 标签<lt:phone>间的内容  
  99. eventType = parser.nextToken();  
  100. // 结束标签</lt:phone>  
  101. eventType = parser.nextToken();  
  102.   
  103. // </lt:phone>和<![CDATA[[]]>间的text  
  104. eventType = parser.nextToken();  
  105.   
  106. // CDSECT:CDATA内容  
  107. eventType = parser.nextToken();  
  108. parser.getName(); // null  
  109. parser.getText(); // CDATA内容  
  110.   
  111. // 实体引用lt  
  112. eventType = parser.nextToken();  
  113. parser.getName(); // 实体引用名lt  
  114. parser.getText(); // 所引用的内容<  
  115.   
  116. // 实体引用lt和</person>间的text  
  117. eventType = parser.nextToken();  
  118.   
  119. // 结束标签</person>  
  120. eventType = parser.nextToken();  
  121.   
  122. // </person>和</persons>间的text  
  123. eventType = parser.nextToken();  
  124.   
  125. // 结束标签</persons>  
  126. eventType = parser.nextToken();  
  127.   
  128. // 文档结束 

原创粉丝点击