Maison > Article > développement back-end > Vous amène à une compréhension plus approfondie de XML
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!