Home  >  Article  >  Backend Development  >  Take you to a deeper understanding of XML

Take you to a deeper understanding of XML

Y2J
Y2JOriginal
2017-04-26 10:12:081502browse

1. XML: extensible markup language version="1.0"

  • ##Extensible: all tags are customized

  • Function: Data storage

    • Configuration file

    • Data transmission

  • Differences between html and xml

    • ##HTML syntax is loose, xml syntax is strict
    • html is used for page display, xml is used for data Storage
    • All tags in Html are predefined, and all tags in xml are customized
    2. xml syntax:

    Document declaration
    • version version number fixed value 1.0
    • encoding specified document The default value of the code table is iso-8859-1
    • standalone. Specify whether the document is independent yes or no
    • must be written in the xml document. One line of
    • is written as: 41d1bdbe64b863f2b16c14c0adc44b32
    • Attributes
    Tags in element xml document
    • Element names are case-sensitive
    • Numbers cannot begin
    • There must be and can only be one root element in the document
    • The element needs to be closed correctly 6c04bd5ca3fcae76e30b72ad730ca86d36cc49f0c466276486e50c850b7e4956 e51d756c5aaad531acceaabe9f3a1238
      • Escape characters>
      • The data inside CDATA will be displayed as it is
      • Attributes
    • Attribute values ​​must be enclosed in quotation marks. Both single and double quotation marks are OK
      • Comments
    • #19791207a4e0a22c816ac020ecd8cae0
      • Processing instructions: Basically no need now
    • 8492057e916c54ee353cd8d3d9f11f4f
      • 3. XML constraints

    Constraints are the writing rules of xml

    • Classification of constraints:

    • Import xsd constraint document
      • Write root tag

      • Introducing the instance namespace xmlns:xsi="www.w3.org/2001/XMLSchema-instance"

      • ##Introducing the namespace xsi:schemaLocation="www.itcast.cn/ xml student.xsd"

      • Introducing the default namespace

      • student.xsd

      • student .xml

      • <?xml version="1.0"?>
        <xsd:schema xmlns="www.itheima.cn/xml"
                xmlns:xsd="www.w3.org/2001/XMLSchema"
                targetNamespace="www.itheima.cn/xml" elementFormDefault="qualified">
            <xsd:element name="students" type="studentsType"/>
            <xsd:complexType name="studentsType">
                <xsd:sequence>
                    <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
            </xsd:complexType>
            <xsd:complexType name="studentType">
                <xsd:sequence>
                    <xsd:element name="name" type="xsd:string"/>
                    <xsd:element name="age" type="ageType" />
                    <xsd:element name="sex" type="sexType" />
                </xsd:sequence>
                <xsd:attribute name="number" type="numberType" use="required"/>
            </xsd:complexType>
            <xsd:simpleType name="sexType">
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="male"/>
                    <xsd:enumeration value="female"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType name="ageType">
                <xsd:restriction base="xsd:integer">
                    <xsd:minInclusive value="0"/>
                    <xsd:maxInclusive value="256"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType name="numberType">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="itheima_\d{4}"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:schema>
        <?xml version="1.0" encoding="UTF-8" ?>
      • beb97ecf77c4243ded97700415203d8a

      • <students
            xmlns="www.itheima.cn/xml"
            xsi:schemaLocation="www.itheima.cn/xml student.xsd"
            xmlns:xsi="www.w3.org/2001/XMLSchema-instance"
        >
            <student number="itheima_1001">
                <name>asfd</name>
                <age>12</age>
                <sex>male</sex>
            </student>
        </students>
        <students
            xmlns:itheima="www.itheima.cn/xml"
            xsi:schemaLocation="www.itheima.cn/xml student.xsd"
            xmlns:xsi="www.w3.org/2001/XMLSchema-instance"
        >
            <itheima:student number="itheima_1001">
                <itheima:name>asfd</itheima:name>
                <itheima:age>12</itheima:age>
                <theima:sex>male</itheima:sex>
            </itheima:student>
        </itheima:students>
      • Internal dtd defines dtd inside xml
      • External dtd defines dtd in external file

      • Student.dtd

      • student.xml

      • Local dtd filea5dfb9c8da626e491c0e8e2104dc79df

      • Network dtd filea32d1fb3a7dc5a5b87f11aea37d08186

      • <!ELEMENT students (student*) >
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT sex (#PCDATA)>
        <!ATTLIST student number ID #REQUIRED> 唯一的,必须的
        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE students SYSTEM  "student.dtd">
        <students>
            <student number="s0001" >
                <name>zs</name>
                <age>abc</age>
                <sex>yao</sex>
            </student>
        </students>
      • dtd The constraints are not strict
      • schema

      • ##4. XML parsing

      parsing XML can be done:

    • If xml is used as a configuration file: read

      • If xml is used as a transfer file: write, read
      • XML parsing ideas:

    • Advantages: Does not occupy memory, fast

      • Disadvantages: Can only read, cannot write back
      • Advantages: Because a dom tree will be formed in the memory, the dom tree can be added, deleted, modified, and checked
      • Disadvantages: The DOM tree takes up a lot of memory and the parsing speed is slow
      • Document Element Text Attribute Comment
      • DOM: Load the document to memory, forming a DOM tree (document object), encapsulating various components of the document into some objects
      • SAX: read line by line, event-driven
      • Commonly used parsers for xml

    • define a rule

      • Usage method
      • Usage steps
      • XPath:
      • public classTestXPath2 {
              @Test
              publicvoidtest()throwsException{
                    SAXReaderread= new SAXReader();
                    Documentdocument= read.read("src/Dom4jTest.xml");
                    Listnodes= document.selectNodes("/bookstore//book/title");
                    for(inti= 0;i< nodes.size();i++) {
                          Nodenode= (Node)nodes.get(i);
                          System.out.println(node.getText());
                    }
              }
        }
      • selectSingleNode()

      • selectNodes()
      • Note: To import the package jaxen...jar
      • 创建解析器 SAXReader reader = new SAXReader()

      • 解析xml 获得document对象 Document document = reader.read(url)

      •         //    nodename 选取此节点。

      •         //    /     从根节点选取。

      •         //    //     从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

      •         //    ..     选取当前节点的父节点。

      •         //    @     选取属性。

      •         //      [@属性名]    属性过滤

      •         //      [标签名]     子元素过滤

      •       @Test

              //遍历所有元素节点

      •  publicvoidtest2()throwsException{
                    //创建一个xml解析对象
                    SAXReaderreader= new SAXReader();
                    //把xml文档加载到document对象中
                    Documentdocument= reader.read("src/Book.xml");
                    Elementroot= document.getRootElement();
                    treeWalk(root);
              }
              
              privatevoidtreeWalk(Elementele){
                    //输出当前节点的名字
                    System.out.println(ele.getName());
                    //ele.nodeCount()得到当前节点的所有子节点的数量
                    for(inti= 0;i<ele.nodeCount();i++){
                          //取出下标为i的节点
                          Nodenode= ele.node(i);
                          //判断当前节点是否为标签
                          if(nodeinstanceofElement){
                                //把node强转为标签(Element)
                                treeWalk((Element)node);
                          }
                    }
              }
        }
      • public classTestDom4j {
              @Test
              publicvoidtest1()throwsException{
                    //创建一个xml解析对象
                    SAXReaderreader= new SAXReader();
                    //把xml文档加载到document对象中
                    Documentdocument= reader.read("src/Book.xml");
                    Elementroot= document.getRootElement();
        //          Element bookNode = root.element("书");
        //          System.out.println(bookNode.getName());
                    //得到当前节点所有的子节点
                    Listlist= root.elements();
                    //得到第二本书对象
                    ElementsecondBook= (Element)list.get(1);
                    //得到当前节点的文本内容
                    Stringname= secondBook.element("书名").getText();
                    System.out.println(name);
              }
      • 导入jar包 dom4j.jar

      • 创建解析器

      • 解析xml 获得document对象

      • SAXReader reader = new SAXReader()

      • Document document = reader.read(url)

      • JAXP sun公司提供的解析 支持dom和sax

      • JDOM

      • DOM4J dom for java民间方式,但是是事实方式,非常好,支持dom

      • 解析xml

      • XPATH 专门用于查询

The above is the detailed content of Take you to a deeper understanding of XML. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn