XML的学习

  • 什么是XML
    概念:可扩展标记语言(可扩展:可以自定义标签)

  • XML和HTML的区别
    1.XML的标签是自定义的,而HTML的标签是有规则的
    2.XML的语法严格,而HTML的语法相对松散(体现在浏览器上)
    3.XML用于存储数据,而HTML用于展示数据

  • XML的功能
    1.存储数据
      1.作为配置文件
      2.可在网络中传输

  • XML的语法
    1.XML文件的文件后缀为.xml
    2.第一行必须被定义为文档声明【最顶上】
    3.XML文档有且仅有一个根标签【总的标签】
    4.属性必须用引号括起(单双皆可)【<use id='1'>】
    5.标签必须闭合(自闭也可)
    6.XML的标签名区分大小写

  • XML的组成部分
    1.文档声明
      1.格式
      <?xml 属性列表?>
      2.属性列表
      1.version:版本号   一般都是version=‘1.0’(这个必须要写,且1.0是主流版本)
      2.encordin:编码方式  告知解析引擎当前文档使用的字符集  encording='GBK'
      3.standalone 是否独立 yes:不依赖与其他文件  no:反之

    2.指令  
      用的比较少,用于结合css

    3.标签:
      自定义名称
      规则:包含字母数字标点,不能以数字标点开始,同时不能以字母xml(大小写变动也不可以)开始,名称不能包括空格

    4.属性
        id属性值唯一

    5.文本
      CDATA区:在该区中数据可以原样显示(编码时,有些字符需要用转义字符)
      CDATA<! 【CDATA 【~~~~(代码)~~】】>
    <?xml version="1.0" encoding="UTF-8"?>
    
    <!--<?xml-stylesheet type="text/css" href="a.css" ?>-->
    
    -<users>
    
    
    -<user id="1">
    
    <name>张三</name>
    
    <age>23</age>
    
    <gender>male</gender>
    
    <br/>
    
    </user>
    
    
    -<user id="2">
    
    <name>lisi</name>
    
    <age>24</age>
    
    <gender>female</gender>
    
    
    -<code>
    
    <!-- if(a &lt; b &amp;&amp; a &gt; c){}-->
    
    
    -<![CDATA[
                    if(a < b && a > c) {}
                ]]]>
    </code>
    
    </user>
    
    </users>
    <?xml version="1.0" encoding="UTF-8"?>
    
    -<students>
    
    
    -<student number="heima_0001">
    
    
    -<name id="itcast">
    
    <xing></xing>
    
    <ming></ming>
    
    </name>
    
    <age>18</age>
    
    <sex>male</sex>
    
    </student>
    
    
    -<student number="heima_0002">
    
    <name>jack</name>
    
    <age>18</age>
    
    <sex>female</sex>
    
    </student>
    
    </students>


  • 约束
    1.说明文档
      规定xml文档的书写规则
      软件-->编写-->约束文档<--阅读<--程序员
    2.种类
      1.DTD    简单
                * DTD:
                    * 引入dtd文档到xml文档中
                        * 内部dtd:将约束规则定义在xml文档中
                        * 外部dtd:将约束的规则定义在外部的dtd文件中
                            * 本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
                            * 网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">

      2.Scheme    复杂
    * 引入:
                        1.填写xml文档的根元素
                        2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
                        4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml" 
    
                    <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns="http://www.itcast.cn/xml"
                        xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd">
        
        
  • 解析
    操作XML文档,将文档中的数据读到内存中

    解析方式
    1.DOM:将标记语言文档一次加载进内存,在内存中形成DOM树
      优点:操作方便,可以对文档进行CRUD的所有操作
      缺点: 消耗内存较大
    2.SAX:逐行读取,基于事件驱动(读一行删一行)
      优点:不占内存
      缺点:不能增删改,只能读取

  • XML常见的解析器
    1.JAXP:支持DOM和SAX思想
    2.DOM4J:--------(DOM的)
    3.JSoup
      入门
        步骤:
        1.导入jar包
        2.获取document对象
        3.获取对应标签Element对象
        4.获取数据
    * 代码:
                     //2.1获取student.xml的path
                    String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
                    //2.2解析xml文档,加载文档进内存,获取dom树--->Document
                    Document document = Jsoup.parse(new File(path), "utf-8");
                    //3.获取元素对象 Element
                    Elements elements = document.getElementsByTag("name");
    /
                    System.out.println(elements.size());
                    //3.1获取第一个name的Element对象
                    Element element = elements.get(0);
                    //3.2获取数据
                    String name = element.text();
                    System.out.println(name);


  • 对象的使用
    1. Jsoup:工具类,可以解析html或xml文档,返回Document
                    * parse:解析html或xml文档,返回Document
                        * parse​(File in, String charsetName):解析xml或html文件的。
                        * parse​(String html):解析xml或html字符串
                        * parse​(URL url(网址), int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
                2. Document:文档对象。代表内存中的dom树
                    * 获取Element对象
                        * getElementById​(String id):根据id属性值获取唯一的element对象
                        * getElementsByTag​(String tagName):根据标签名称获取元素对象集合
                        * getElementsByAttribute​(String key):根据属性名称获取元素对象集合
                        * getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合
                3. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用
                4. Element:元素对象
                    1. 获取子元素对象
                        * getElementById​(String id):根据id属性值获取唯一的element对象
                        * getElementsByTag​(String tagName):根据标签名称获取元素对象集合
                        * getElementsByAttribute​(String key):根据属性名称获取元素对象集合
                        * getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合
    
                    2. 获取属性值
                        * String attr(String key):根据属性名称获取属性值
                    3. 获取文本内容
                        * String text():获取文本内容
                        * String html():获取标签体的所有内容(包括字标签的字符串内容)
                5. Node:节点对象
                    * 是Document和Element的父类
  • 快捷方式的使用
    * 快捷查询方式:
                1. selector:选择器
                    * 使用的方法:Elements    select​(String cssQuery)
                        * 语法:参考Selector类中定义的语法
                2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
                    * 使用Jsoup的Xpath需要额外导入jar包。
                    * 查询w3cshool参考手册,使用xpath的语法完成查询
                    * 代码:
                        //1.获取student.xml的path
                        String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
                        //2.获取Document对象
                        Document document = Jsoup.parse(new File(path), "utf-8");
                
                        //3.根据document对象,创建JXDocument对象
                        JXDocument jxDocument = new JXDocument(document);
                
                        //4.结合xpath语法查询
                        //4.1查询所有student标签
                        List<JXNode> jxNodes = jxDocument.selN("//student");
                        for (JXNode jxNode : jxNodes) {
                            System.out.println(jxNode);
                        }
                
                        System.out.println("--------------------");
                
                        //4.2查询所有student标签下的name标签
                        List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
                        for (JXNode jxNode : jxNodes2) {
                            System.out.println(jxNode);
                        }
                
                        System.out.println("--------------------");
                
                        //4.3查询student标签下带有id属性的name标签
                        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
                        for (JXNode jxNode : jxNodes3) {
                            System.out.println(jxNode);
                        }
                        System.out.println("--------------------");
                        //4.4查询student标签下带有id属性的name标签 并且id属性值为itcast
                
                        List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']");
                        for (JXNode jxNode : jxNodes4) {
                            System.out.println(jxNode);
                        }
原文地址:https://www.cnblogs.com/YanZhuDL/p/11528925.html