Maison  >  Article  >  développement back-end  >  Vous amène à une compréhension plus approfondie de XML

Vous amène à une compréhension plus approfondie de XML

Y2J
Y2Joriginal
2017-04-26 10:12:081552parcourir

1. XML : langage de balisage extensible version="1.0"

  • Extensible : toutes les balises sont personnalisées

  • Fonction : Stockage de données

    • Fichier de configuration

    • Transfert de données

  • La différence entre HTML et xml

    • La syntaxe HTML est lâche, la syntaxe XML est stricte

    • html est utilisé pour l'affichage des pages, XML est utilisé pour le stockage des données

    • Html toutes les balises sont prédéfinies, xml toutes les balises sont personnalisées

2. syntaxe xml :

  • Déclaration du document

    • numéro de version valeur fixe 1.0

    • encodage du document spécifié La valeur par défaut de la table de codes est iso-8859-1

    • autonome. Précisez si le document est indépendant oui ou non

    • doit être écrit dans le document XML. Une ligne

    • s'écrit : 41d1bdbe64b863f2b16c14c0adc44b32

    • Attributs

  • balise dans le document XML de l'élément

    • Le nom de l'élément est sensible à la casse

    • Les nombres ne peuvent pas commencer par

    • Il doit y avoir et ne peut y avoir qu'un seul élément racine dans le document

    • L'élément doit être fermé correctement6c04bd5ca3fcae76e30b72ad730ca86d15c688afeebae85e5bf5d2c840a44a19

    • Caractère d'échappement>

    • Les données dans CDATA seront affichées telles quelles

  • Attributs

    • Les valeurs d'attribut doivent être placées entre guillemets simples et doubles.

  • Commentaires

    • . 19791207a4e0a22c816ac020ecd8cae0

  • Instructions de traitement : fondamentalement inutile maintenant

    • 1e6a1202ad06a9c0e6c66652b1c6d809

3.Contraintes XML

  • Les contraintes sont les règles d'écriture du xml

  • Classification des contraintes :

    • Importer un document de contraintes xsd

    • Écrire la balise racine

    • Présentation de l'espace de noms d'instance xmlns:xsi="www.w3.org/2001/XMLSchema-instance"

    • Présentation de l'espace de noms xsi:schemaLocation="www.itcast.cn/ xml student.xsd"

    • Présentation de l'espace de noms par défaut

    • student .xsd

    • étudiant .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" ?>
    • 4a3bea878681a047410135fbf6676372

    • <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>
    • Dtd interne Définir dtd dans XML

    • Dtd externe Définir dtd dans un fichier externe

    • Student.dtd

    • student.xml

    • Fichier dtd local23664891ed359a6be5f1c7edb9184257

    • Fichier dtd réseauc728c23c49e264196a184b5283bb6b1f

    • <!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 n'est pas strictement contraint

    • schéma

4. Analyse XML

  • Pour analyser XML vous pouvez faire :

    • si XML comme fichier de configuration : lire

    • si XML comme fichier de transfert : Écrire, lire

  • Idées d'analyse XML :

    • Avantages : N'occupe pas de mémoire, rapide

    • Inconvénients : Peut seulement lire, ne peut pas réécrire

    • Avantages : Parce qu'un arbre DOM sera formé dans la mémoire, l'arborescence DOM peut être ajoutée, supprimée, modifiée et vérifiée

    • Inconvénients : L'arborescence DOM prend beaucoup de mémoire et la vitesse d'analyse est lente

    • Commentaire d'attribut texte d'élément de document

    • DOM : chargez le document en mémoire pour former une arborescence DOM (objet document), encapsulant chaque composant du document dans certains objets

    • SAX : Lire ligne par ligne, basé sur des événements. Le pilote

  • analyseur xml couramment utilisé

    • définit une règle

    • Comment utiliser

    • Étapes à utiliser

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

    • Remarque : Pour importer le 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 专门用于查询

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn