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开发编码相对复杂。

  • 相关阅读:
    JavaEE——SpringMVC(11)--拦截器
    JavaEE——SpringMVC(10)--文件上传 CommonsMultipartResovler
    codeforces 460A Vasya and Socks 解题报告
    hdu 1541 Stars 解题报告
    hdu 1166 敌兵布阵 解题报告
    poj 2771 Guardian of Decency 解题报告
    hdu 1514 Free Candies 解题报告
    poj 3020 Antenna Placement 解题报告
    BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告
    poj 1325 Machine Schedule 解题报告
  • 原文地址:https://www.cnblogs.com/VueDi/p/10896059.html
Copyright © 2011-2022 走看看