Fork me on Gitee

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

 

posted @ 2019-05-24 20:27  VueDi  阅读(129)  评论(0编辑  收藏