• 6、XML(2)


    1 总结XML基础

    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 引入

                                     问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!

                         3.2 xPath作用

                                                主要是用于快速获取所需的节点对象。

                         3.3 在dom4j中如何使用xPath技术

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

                                                2)使用xpath方法

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

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

                                               

                         3.4 xPath语法

                                                /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)

                                                //     相对路径       表示不分任何层次结构的选择元素。

                                                *      通配符         表示匹配所有元素

                                                []      条件           表示选择什么条件下的元素

                                                @     属性            表示选择属性节点

                                                and     关系          表示条件的与关系(等价于&&)

                                                text()    文本           表示选择文本内容

                    3.5 案例

                                                用户登录功能:

                                                           用户输入用户名和密码 -> 到“数据库”查询是否有对应的用户 ->

                                                                      有: 则表示登录成功

                                                                      没有: 则表示登录失败

                                                用xml当做数据库

                                                                      user.xml   用来存储用户的数据

    4 SAX解析

                         4.1回顾DOM解析

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

                                                                                            对内存要求比较要。       

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

                                                          

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

                         4.2 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());

    }              [一个类继承class 类名(extends DefaultHandler)  在调用是创建传进去

     

                                                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)  : 读到文本内容时调用

                                               

                                                           ============DOM解析    vs   SAX解析                     ========

              

    DOM解析

    SAX解析

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

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

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

    SAX解析只能读取

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

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

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

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

                          总结:

                                                1)Dom4j修改xml文档

                                                            new XMLWrier();

                                                                      ......

                                                2)xPath技术: 快速查询xml节点

                                                                      selectNodes()

                                                                      selectSinglNode();

                                                           xpath表达式语言               

                                                3)  SAX解析

                                                                      SAXParser parse

                                                                                 parser()

                                                           DefaultHandler类:

                                                                                 startElement();

                                                                                 characters();

                                                                                 endElement();

    练习:                    

                          设计一个通讯录程序

                                                联系人: 编号  姓名  性别  年龄  电话  QQ 邮箱

                                                功能要求:

                                                           添加联系人

                                                           修改联系人

                                                           删除联系人

                                                           查询所有联系人

                                               

                                     要求:

                                     1)交互使用console(控制台)    

                                     2)数据存储到xml文件(作为“数据库”)(使用dom4j)

               提示:

                                     启动程序

                                                           ================

                                                           【1】添加联系人

                                                           【2】修改联系人

                                                           【3】删除联系人

                                                           【4】查询所有联系人

                                                           【Q】退出程序

                                                           ==================

                                     输入 1:

                                                           请输入编号:

                                                           请输入姓名:

                                                           请输入年龄

                                                   。。。。

                                                           添加成功!  -> 数据保存在xml中

                                   输入2

                                                           。。。。。。

                                     输入4

                                                           编号  姓名   年龄  。。。。

                                                           001   张三  30

                                                           002   李四 20 。。。

                                                           。。。。。                             

  • 相关阅读:
    am335x gpio控制
    递归删除子目录下所有.la后缀文件
    linphone 在am335x的编译过程
    linphone 调试信息
    【POJ 3020】Antenna Placement(二分图匹配)
    【POJ 1062】昂贵的聘礼(最短路)
    【POJ 2485】Highways(Prim最小生成树)
    【Gym 100947E】Qwerty78 Trip(组合数取模/费马小定理)
    解决already defined in .obj 的问题(定义/声明的区别)
    C语言+SDL2 图形化编程
  • 原文地址:https://www.cnblogs.com/GJ-ios/p/6025169.html
Copyright © 2020-2023  润新知