XML概述以及Pull剖析详解
ONE Goal ,ONE Passion !
做Android开辟最多的都是json.而且剖析xml都用Xstream,慢慢地xml的手动剖析都快忘记了.平常最罕见的照样基于dom的demo4j , 另有基于sax的pull剖析.另有一种吧忘记了
概述:
XML是什么 ?
eXtensible Markup Language(可扩大的标记言语);
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剖析的示例代码的细致内容,更多请关注ki4网别的相干文章!