zoukankan      html  css  js  c++  java
  • XML学习(二)

    1、上期回忆

    XML基础

            1)XML的作用

                    1.1 作为软件配置文件

                    1.2 作为小型的"数据库"

            2)XML语法(由w3c组织规定的)

                    标签:

                            标签名不能以数字开头,中间不能有空格,区分大小写。有且仅有一个根标签。

                    属性:        

                            可有多个属性,但属性值必须用引号(单引号或双引号)包含,但不能省略,也不能单双混用。

                    文档声明:

                            <?xml version="1.0" encoding="utf-8"?>    

                            encoding="utf-8": 打开或解析xml文档时的编码

                            注意:

                        保存xml文档时的编码 和 解析xml文档时的编码要保持一致,才能避免中文乱码问题!

            3)XML解析

                    程序读取或操作xml文档

                    两种解析方式: DOM解析 vs SAX解析

                    DOM解析原理:一次性把xml文档加载成Document树,通过Document对象得到节点对象,通过节点对象访问xml文档内容(标签,属性,文本,注释)。

                    Dom4j工具(基于DOM解析原理):

                            读取xml文档:

                                 Document doc = new SAXReader().read("xml文件");

                            节点:

                                    nodeIterator(); 所有节点

                            标签:

                                    element("名称") 指定名称的第一个子标签对象

                                    elementIterator("名称"); 指定名称的所有子标签对象

                                    elements(); 所有子标签对象

                            属性:

                                    attributeValue("名称") 指定名称的属性值

                                    attribute("名称") 指定名称的属性对象

                                            getName() 属性名称

                                            getValue() 属性值

                                    atributeIterator() 所有属性对象(Iterator)

                                    attributes() 所有属性对象(List)

                            文本:

                                    getText() 得到当前标签的文本

                                    elementText("子标签名称") 得到子标签的文本

    本文内容:Dom4J修改xml 、 xPath技术 、SAX解析 、XML约束学习

    2、Dom4j修改xml文档

    2.1 写出内容到xml文档

                    XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)

                    wirter.write(Document);

    2.2 修改xml文档的API

                增加:

                        DocumentHelper.createDocument(); 增加文档

                        addElement("名称") ;增加标签

                        addAttribute("名称","值") 增加属性

                修改:

                        Attribute.setValue("值") 修改属性值

                        Element.addAtribute("同名的属性名","值") 修改同名的属性值

                        Element.setText("内容") 修改文本内容

                删除:

                        Element.detach(); 删除标签

                        Attribute.detach(); 删除属性

    3 xPath技术       

    3.1 xPath作用

    当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦。而基于xPath解析xml文档,可以快速获取所需的节点对象。

    3.2 在dom4j中如何使用xPath技术

                    1)导入xPath支持jar包 。 jaxen-1.1-beta-6.jar

                    2)使用xpath方法

                            List<Node> selectNodes("xpath表达式"); 查询多个节点对象

                            Node selectSingleNode("xpath表达式"); 查询一个节点对象

    3.3 xPath语法

    • / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
    • // 相对路径 表示不分任何层次结构的选择元素。
    • * 通配符 表示匹配所有元素
    •  [] 条件 表示选择什么条件下的元素
    • @ 属性 表示选择属性节点
    • and 关系 表示条件的与关系(等价于&&)
    • text() 文本 表示选择文本内容

    4 SAX解析

                    DOM解析原理:一次性把xml文档加载进内存,然后在内存中构建Document树

                                    对内存要求比较要。    

                            缺点: 不适合读取大容量的xml文件,容易导致内存溢出。

                    SAX解析原理: 加载一点,读取一点,处理一点。对内存要求比较低。

    4.1 SAX解析工具    

                        SAX解析工具- Sun公司提供的。内置在jdk中。org.xml.sax.*

                        核心的API:

                             SAXParser类: 用于读取和解析xml文件对象

                              parse(File f, DefaultHandler dh)方法: 解析xml文件

                            参数一: File:表示 读取的xml文件。

                           参数二: DefaultHandler: SAX事件处理程序。使用DefaultHandler的子类

        例如:{

                        1.创建SAXParser对象

                   SAXParser parser=SAXParserFactory.newInstance().newSAXParser();

                   2.调用parse方法

                         parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());

        }

                    DefaultHandler类的API:

                            void startDocument() : 在读到文档开始时调用

                            void endDocument() :在读到文档结束时调用

                            void startElement(String uri, String localName, String qName, Attributes attributes) :读到开始标签时调用                

                            void endElement(String uri, String localName, String qName) :读到结束标签时调用

                            void characters(char[] ch, int start, int length) : 读到文本内容时调用

    5 总结

    xml:可扩展的标记语言。

    xml:用于存储数据。

     

            XML是严格区分大小写的。

            XML标签也是成对出现的。

            xml有且只能有一个根节点

    5.1 通过代码创建XML文档 (C#语言)

            引用命名空间:System.Xml

            //创建XML文档对象:

    XmlDocument doc=new XmlDocument();

    //创建第一行描述信息,并添加到doc中

    XmlDeclaration dec=doc.CreateXmlDeclaration(”1.0”,”utf-8”,null);

    doc.AppendChild(dec);

    //创建根节点,并添加到doc中

    XmlElement books=doc.CreateElement(”Books”);

    doc.AppendChild(books);

    //给根节books点创建子节点,并添加到books根节点中

    XmlElement book1=doc.CreateElement(”Book”);

    books.AppendChild(book1);

    //给子节点book1创建子节点,并添加到book1子节点中

    XmlElement name1=doc.CreateElement(”Name”);

    name1.InnerText=”C#编程”;

    book1.AppendChild(name1);

     

    XmlElement price1=doc.CreateElement(”Price”);

    price1.InnerText=”100”;

    book1.AppendChild(price1);

     

    XmlElement des1=doc.CreateElement(”Des”);

    des1.InnerText=”好看”;

    book1.AppendChild(des1);

    // 保存文件

    doc.Save(“Books.xml”); 

    5.2 DOM解析与SAX解析对比 

    DOM解析

    SAX解析

    原理: 一次性加载xml文档,不适合大容量的文件读取

    原理: 加载一点,读取一点,处理一点。适合大容量文件的读取

    DOM解析可以任意进行增删改成

    SAX解析只能读取

    DOM解析任意读取任何位置的数据,甚至往回读

    SAX解析只能从上往下,按顺序读取,不能往回读

    DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。

    SAX解析基于事件的编程方法。java开发编码相对复杂。

  • 相关阅读:
    android焦点
    URI和URL的区别比较与理解
    Android Bundle类
    repo命令
    ubuntu adb找不到设备
    【python】-网络编程
    【python】-反射
    【python】-类的特殊成员方法
    【python】-7-面向对象的进阶
    【python】-多态
  • 原文地址:https://www.cnblogs.com/VueDi/p/10896059.html
Copyright © 2011-2022 走看看