XML概述以及Pull解析的示例代码

互联网 17-3-18

XML概述以及Pull解析详解

 ONE Goal ,ONE Passion !

做Android开发最多的都是json.而且解析xml都用Xstream,慢慢地xml的手动解析都快忘记了.一般最常见的还是基于dom的demo4j , 还有基于sax的pull解析.还有一种吧忘记了

概述:

XML常见作用:

1,用作配置文件 2,数据传输时数据格式 3,Android中资源文件

XML的基本语法:

1.声明 必须写在第一行

<?xml version="1.0" encoding="utf-8"?>        version : xml的版本号.目前只有1,0版本        encoding: 编码格式

2,只能有一个根标签

3,每个标签都必须闭合

4,不能交叉嵌套

形如:

    <?xml version="1.0" encoding="utf-8"?>      <resources>          <color name="colorPrimary">#3F51B5</color>       </resources>

5,CDATA区

    <![CDATA[        将有特殊符号文本显示      if( 3< 5 ){         }        ]]>

如在文档中使用”<”,”>”等特殊符号时要使用CDATA区,否者不能正常编译.

Pull编写XML文件.

public class WriteXml {      public static void main(String[] args) throws Exception {          // 创建xml解析工厂          XmlPullParserFactory factory = XmlPullParserFactory.newInstance();                  // 通过工厂创建序列化器(xml生成器)          XmlSerializer ser = factory.newSerializer();                  // 为序列化器指定输出流(将xml文件写到指定的某个文件中)          ser.setOutput(new FileOutputStream("src/b.xml"), "utf-8");                  //  开始写xml文件            // 1.xml的声明---------- <?xml version='1.0' encoding='utf-8' standalone='yes' ?>          ser.startDocument("utf-8", true);                  // 2. 开始标签  ---------- <书库>          ser.startTag(null, "书库");                  for (          int i = 0; i < 2; i++) {                  //3.开始标签 ------------- <书>              ser.startTag(null, "书");                      // 4. 开始标签------------ <书名>              ser.startTag(null, "书名");                      //4.1为书名标签设置 属性--------- <书名 id = "1001">                 ser.attribute(null, "id", "1001");                      //4.2标签设置  文本------------  <书名 id = "1001" >百年孤独                  ser.text("百年孤独");                      // 5,结束标签 ------------  </书名>              ser.endTag(null, "书名");                      // 6.结束标签------------</书>                 ser.endTag(null, "书");                       }                  // 7.根标签 结束-----------</书库>          ser.endTag(null, "书库");          ser.endDocument();        }      }

生成的b.xml文件为:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>      <书库>          <书>              <书名 id="1001">百年孤独</书名>          </书>          <书>              <书名 id="1002">百年孤独</书名>          </书>      </书库>

Pull解析XMl:

 public class XmlParserDemo {        /**       * @param args       * @throws Exception       */      public static void main(String[] args) throws Exception {              // 创建pull解析器工厂对象          XmlPullParserFactory factory = XmlPullParserFactory.newInstance();                  // 创建解析器对象          ArrayList<Book> list = null;          Book book = null;                  // 获得解析器          XmlPullParser parser = factory.newPullParser();                  // 从指定文件中解析 出xml          parser.setInput(new FileInputStream("src/b.xml"), "utf-8");                  // 1 . 判断是否是根标签的结束标签          while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {                      switch (parser.getEventType()) {                      case XmlPullParser.START_TAG: // 开始标签                  if (parser.getName().equalsIgnoreCase("书库")) {                   // ------------<书库>                      // 如果是 跟标签时,创建集合存储 对象                      list = new ArrayList<Book>();                  } else if (parser.getName().equalsIgnoreCase("书")) {                   // ----------<书>                        // 当标签是对象时. 创建 对象                      book = new Book();                    } else if (parser.getName().equalsIgnoreCase("书名")) {                  // ----------<书名>                        // 获得当前标签中的 属性以及text.并存储到对象中                      String id = parser.getAttributeValue(null, "id");                      book.setId(id);                      String name = parser.nextText();                      book.setName(name);                    }                                  break;                              case XmlPullParser.END_TAG: // 结束标签                  // 标签为对象的结束标签时,将对象存储到集合中 </书>                  if (parser.getName().equalsIgnoreCase("书")) {                   // -------</书>                                                                                                                                                  // 注意:当时</书名>结束标签时不用做处理                      list.add(book);                  }                                  break;                }                parser.next();            }        for (int i = 0; i < list.size(); i++) {              System.out.println("---" + list.get(i));          }        }      }

注意事项:

1,使用kxml2-2.3.0.jar和xmlpull_1_1_3_4c.jar两个jar进行解析.

如果没有build.path会报下面的错误:

 org.xmlpull.v1.XmlPullParserException: caused by: org.xmlpull.v1.XmlPullParserException:    resource not found: /META-INF/services/org.xmlpull.v1.XmlPullParserFactory make sure that parser implementing XmlPull API is available

2.parser.getName()方法的返回值–标签名

形如:

      //返回null    <?xml version='1.0' encoding='utf-8' standalone='yes' ?>        //返回          书名,null,书名    <书名 id="1001">百年孤独</书名>        //返回      书名,null,书名    <书名 id="1002"></书名>

当parser解析时.parser也会移动到标签题文本(text)中.而text没有标签名所以为null.

以上就是XML概述以及Pull解析的示例代码的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: XML,Pull
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:XML文件解析汇总SAX/DOM/PULL的详细介绍

相关资讯