旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

XML概述以及Pull剖析的示例代码【XML教程】,XML,Pull

作者:搜教程发布时间:2019-12-01分类:XML教程浏览:64评论:0


导读:XML概述以及Pull剖析详解ONEGoal,ONEPassion!做Android开辟最多的都是json.而且剖析xml都用Xstream,慢慢地xml的手...


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网别的相干文章!

标签:XMLPull


欢迎 发表评论: