Heim  >  Artikel  >  Backend-Entwicklung  >  Vermitteln Sie ein tiefgreifendes Verständnis von XML

Vermitteln Sie ein tiefgreifendes Verständnis von XML

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

1. XML: erweiterbare Markup-Sprachversion="1.0"

  • Erweiterbar: alle Tags werden angepasst

  • Funktion: Datenspeicherung

    • Konfigurationsdatei

    • Datenübertragung

  • Der Unterschied zwischen HTML und xml

    • HTML-Syntax ist locker, XML-Syntax ist streng

    • HTML wird für die Seitenanzeige verwendet, XML wird für die Datenspeicherung verwendet

    • Html alle Tags sind vordefiniert, XML alle Tags sind angepasst

2. XML-Syntax:

  • Dokumentdeklaration

    • Version Versionsnummer fester Wert 1.0

    • Kodierung des angegebenen Dokuments Der Standardwert der Codetabelle ist iso-8859-1

    • eigenständig. Geben Sie an, ob das Dokument unabhängig ist.

    • muss im XML-Dokument geschrieben werden. Eine Zeile

    • wird wie folgt geschrieben: 41d1bdbe64b863f2b16c14c0adc44b32

    • Attribute

  • Tags im Element-XML-Dokument

    • Bei Elementnamen muss die Groß-/Kleinschreibung beachtet werden

    • Zahlen dürfen nicht mit beginnen

    • Es muss und darf nur ein Wurzelelement im Dokument geben

    • Das Element muss korrekt geschlossen werden6c04bd5ca3fcae76e30b72ad730ca86ddbf4a1b9d12965251b02d12dd197d73e 37baec97b8e6a5b59e5a3b91c3d20a20

    • Escape-Zeichen>

    • Die Daten in CDATA werden unverändert angezeigt

  • Attribute

    • Attributwerte müssen in Anführungszeichen gesetzt werden.

  • Kommentare

    • 19791207a4e0a22c816ac020ecd8cae0

  • Verarbeitungshinweise: jetzt grundsätzlich nicht nötig

    • 1440df80d4619c84bac1383592655cd1

3. XML-Einschränkungen

  • Einschränkungen sind die Schreibregeln von XML

  • Klassifizierung von Einschränkungen:

    • XSD-Einschränkungsdokument importieren

    • Wurzel-Tag schreiben

    • Einführung in den Instanz-Namespace xmlns:xsi="www.w3.org/2001/XMLSchema-instance"

    • Einführung des Namespace xsi:schemaLocation="www.itcast.cn/ xml student.xsd"

    • Einführung des Standard-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" ?>
    • 29bfb5e2b785846b5a1e5f22e4991622

    • <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>
    • Internes dtd Definieren Sie dtd innerhalb von XML

    • Externes dtd Definieren Sie dtd in externer Datei

    • Student.dtd

    • student.xml

    • Lokale DTD-Datei516368ac1dce7636c8b5f9465ab00b03

    • Netzwerk-DTD-Datei97f4d1cbef7d38101fd66c856a86ff07

    • <!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 ist nicht streng eingeschränkt

    • Schema

4. XML-Analyse

  • Um XML zu analysieren, können Sie Folgendes tun:

    • wenn XML als Konfigurationsdatei: lesen Sie

    • wenn XML als Transferdatei: Schreiben, lesen

  • XML-Parsing-Ideen:

    • Vorteile: Belegt keinen Speicher, schnell

    • Nachteile: Kann nur lesen, nicht zurückschreiben

    • Vorteile: Da es sich um einen DOM-Baum handelt Im Speicher gebildet, kann der DOM-Baum hinzugefügt, gelöscht, geändert und überprüft werden

    • Nachteile: Der DOM-Baum nimmt viel Speicher ein und die Analysegeschwindigkeit ist langsam

    • Dokumentelement-Textattributkommentar

    • DOM: Laden Sie das Dokument in den Speicher, um einen DOM-Baum (Dokumentobjekt) zu bilden, der jede Komponente des Dokuments in einige kapselt Objekte

    • SAX: Zeile für Zeile lesen, basierend auf Ereignissen Der Treiber

  • xml häufig verwendeter Parser

    • definiert eine Regel

    • Verwendung

    • Schritte zur Verwendung

    • 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()

    • Hinweis: Zum Importieren des Pakets 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 专门用于查询

Das obige ist der detaillierte Inhalt vonVermitteln Sie ein tiefgreifendes Verständnis von XML. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn