Heim >Backend-Entwicklung >XML/RSS-Tutorial >Verwenden Sie den Befehl xmllint, um XML zu verarbeiten
Beispiel
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'
Im obigen Beispiel ist es so hauptsächlich durch Nach der Abfrage des Besitzes der IP-Adresse auf 123cha wird nur der Inhalt des Textteils durch Extrahieren des Ergebnisses (ul#csstb) abgerufen. Die Ergebnisse nach der Ausführung der obigen Skriptanweisung lauten wie folgt:
[Ihre Anfrage]:8.8.8.8
Hauptdaten dieser Site:
Vereinigte Staaten
Sekundärdaten davon Website: Öffentlicher DNS-Anbieter von Google: hypo
Vereinigte Staaten Google Kostenloser öffentlicher DNS-Anbieter von Google: zwstar Referenzdaten eins: Vereinigte Staaten
Referenzdaten zwei: Vereinigte Staaten
Werfen wir einen Blick auf die Verwendung anderer Hauptparameter mit Beispielen.
1. --format
Dieser Parameter wird verwendet, um XML zu formatieren, um es lesbar zu machen.
Angenommen, es gibt XML (person.xml) mit folgendem Inhalt:
0833d296851a1e081f2175a4cbfa71358a11bc632ea32a57b3e3693c7987c420balldf406f776eecbaf16b62325323196f14ff4fd28be6111b38109cb452b13c2daa30bcfbf0f15553394c7c6f337b58908853 maled575e2c07f4556bb151a80c4adfa44ffcb884f44f2f1937276917c04c3676183
Nachdem die folgenden Vorgänge ausgeführt wurden, erfolgt die Ausgabe in einem besser lesbaren XML-Format:
#xmllint --format person.xml <?xml version="1.0"?> <person> <name>ball</name> <age>30</age> <sex>male</sex> </person>
2 ist manchmal das Gegenteil von --format. Um das Übertragungsvolumen zu sparen, möchten wir die Leerzeichen in XML entfernen. In diesem Fall können wir den Befehl --noblanks verwenden.
Angenommen, der Inhalt von XML (person.xml) ist wie folgt<?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>
Verwenden Sie scheam, um die Richtigkeit der XML-Datei zu überprüfen (XML-Schema ist ein XML-basierter Ersatz für
person.xml validiert
Hinweis: Standardmäßig wird der Inhalt der überprüften Datei überprüft wird nach der Überprüfung ausgegeben. Mit der Option --noout können Sie diese Ausgabe entfernen, sodass wir nur die endgültigen Überprüfungsergebnisse erhalten.<?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 validiert
Jetzt ändern wir person.xml so, dass das Altersfeld dieser Datei und Sex entspricht nicht der Definition von xsd.
#xmllint --schema person.xsd person.xml <?xml version="1.0"?> <person> <name>ball</name> <age>30</age> <sex>male</sex> </person>Sie können sehen, dass xmllint den Fehler erfolgreich gemeldet hat!
4. Über die Ausgabe von --schema
Bevor wir über die Ausgabe sprechen, schauen wir uns das folgende Szenario an: Wenn Sie xmllint über PHP ausführen und das Rückgabeergebnis erhalten möchten , Ihr Code sollte normalerweise wie folgt aussehen: valid.php
Wir behalten den Fehler in person.xml oben.
#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) {}, erstaunlich!
Warum passiert das?
Der Ausgabeparameter von exec kann nur den von der Standardausgabe (stdout) angezeigten Inhalt abrufen.
Um die Fehlermeldung zu erhalten, müssen wir also den Standardfehler auf die Standardausgabe umleiten und den Code entsprechend ändern:<?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"; Führen Sie valid.php erneut aus und erhalten Sie die Fehlermeldung erfolgreich!
Beispiel
ee8c11313070fdbf42a8eb4b3e605a5aDann schreiben Sie po.xml Das Schema Die Datei heißt po.xsd und hat den folgenden Inhalt:
207a5cd0530fd3904973dfab79171a7f Verwenden Sie xmllint, um die po.xml-Datei zu überprüfen:
$ xmllint -schema po.xsd po.xml Wenn keine Fehlermeldung angezeigt wird, bedeutet dies, dass die Überprüfung erfolgreich war.
Das obige ist der detaillierte Inhalt vonVerwenden Sie den Befehl xmllint, um XML zu verarbeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!