Maison > Article > développement back-end > Utilisez la commande xmllint pour traiter XML
Exemple
curl http://www.php.cn /ip/?q=8.8.8.8 2>/dev/null | xmllint --html --xpath " //ul[@id='csstb']" - 2>/dev/null | sed -e 's/549a3fd9a3c62568d8b32cd8627105c3]*>//g'
Dans l'exemple ci-dessus, il s'agit principalement via Après avoir interrogé la propriété de l'adresse IP sur 123cha, seul le contenu de la partie texte est obtenu en extrayant le résultat (ul#csstb). Les résultats après l'exécution de l'instruction de script ci-dessus sont les suivants :
[Votre requête] :8.8.8.8
Données principales de ce site :
États-Unis
Données secondaires de ce site : Fournisseur DNS public Google : hypo
États-Unis Fournisseur DNS public Google gratuit Google : zwstar Données de référence 1 : États-Unis
Données de référence 2 : États-Unis
Jetons un coup d'œil à l'utilisation d'autres paramètres principaux avec des exemples.
1. --format
Ce paramètre est utilisé pour formater le XML afin de le rendre lisible.
Supposons qu'il existe un fichier XML (person.xml) avec le contenu suivant :
0833d296851a1e081f2175a4cbfa71358a11bc632ea32a57b3e3693c7987c420balldf406f776eecbaf16b62325323196f14ff4fd28be6111b38109cb452b13c2daa30bcfbf0f15553394c7c6f337b58908853 maled575e2c07f4556bb151a80c4adfa44ffcb884f44f2f1937276917c04c3676183
Après avoir effectué les opérations suivantes, la sortie sera dans un format XML plus lisible :
#xmllint --format person.xml <?xml version="1.0"?> <person> <name>ball</name> <age>30</age> <sex>male</sex> </person>
2. est l'opposé de --format, parfois Afin d'économiser le volume de transmission, nous souhaitons supprimer les blancs dans XML. Dans ce cas, nous pouvons utiliser la commande --noblanks.
Supposons que le contenu de XML (person.xml) soit le suivant<?xml version="1.0"?> <person> <name>ball</name> <age>30</age> <sex>male</sex> </person>
#xmllint --noblanks person.xml <?xml version="1.0"?> <person><name>ball</name><age>30</age><sex>male</sex></person>
Utilisez un schéma pour vérifier l'exactitude du fichier XML (le schéma XML est un remplacement basé sur XML pour
person.xml valide
Remarque : Par défaut, le contenu du fichier vérifié sera affiché après vérification. Vous pouvez utiliser l'option --noout pour supprimer cette sortie, afin que nous puissions obtenir uniquement les résultats de la vérification finale.<?xml version="1.0"?> <person> <name>ball</name> <age>30</age> <sex>male</sex> </person>
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="sex"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="male"/> <xs:enumeration value="female"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="person"> <xs:complexType> <xs:all> <xs:element ref="name"/> <xs:element ref="age"/> <xs:element ref="sex"/> </xs:all> </xs:complexType> </xs:element> </xs:schema>person.xml valide
Maintenant, nous modifions person.xml pour que le champ d'âge de ce fichier et le sexe ne répond pas à la définition de xsd.
#xmllint --schema person.xsd person.xml <?xml version="1.0"?> <person> <name>ball</name> <age>30</age> <sex>male</sex> </person>Vous pouvez voir que xmllint a signalé l'erreur avec succès !
4. À propos de la sortie de --schema
Avant de parler de la sortie, examinons le scénario suivant si vous souhaitez exécuter xmllint via php et obtenir le résultat de retour. , votre code est généralement Il devrait ressembler à ceci valid.php
Nous gardons l'erreur dans person.xml ci-dessus.
#xmllint --noout --schema person.xsd person.xml person.xml:4: element age: Schemas validity error : Element 'age': 'not age' is not a valid value of the atomic type 'xs:integer'. person.xml:5: element sex: Schemas validity error : Element 'sex': [facet 'enumeration'] The value 'test' is not an element of the set {'male', 'female'}. person.xml:5: element sex: Schemas validity error : Element 'sex': 'test' is not a valid value of the local atomic type. person.xml fails to validatearray
(0) {}, incroyable !
Pourquoi cela se produit-il ?
Le paramètre de sortie de exec ne peut obtenir que le contenu affiché par la sortie standard (stdout).
Donc, pour obtenir le message d'erreur, nous devons rediriger l'erreur standard vers la sortie standard et modifier le code en conséquence :<?php $command = "xmllint --noout --schema person.xsd person.xml"; exec($command, $output, $retval); //出错时返回值不为0 if ($retval != 0){ var_dump($output); } else{ echo "yeah!"; }
$command = "xmllint --noout --schema person.xsd person .xml 2>$1"; Exécutez à nouveau valid.php et obtenez le message d'erreur avec succès !
Exemple
ee8c11313070fdbf42a8eb4b3e605a5a Puis écrivez po.xml Le schéma Le fichier est nommé po.xsd et a le contenu suivant :
207a5cd0530fd3904973dfab79171a7f Utilisez xmllint pour vérifier le fichier po.xml :
$ xmllint -schema po.xsd po.xml S'il n'y a pas de message d'erreur, cela signifie que la vérification a réussi.
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!