Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie den Befehl xmllint, um XML zu verarbeiten

Verwenden Sie den Befehl xmllint, um XML zu verarbeiten

PHPz
PHPzOriginal
2017-04-02 11:10:564424Durchsuche

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


Nach der Ausführung dieser Parameteroperation lautet das Ausgabeergebnis:
<?xml version="1.0"?>
    <person>
      <name>ball</name>
      <age>30</age>
      <sex>male</sex>
    </person>


3 . --schema
#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

DTD

) Angenommen, es gibt eine XML-Datei (person.xml) und eine Scheam-Datei (person .xsd). Der Inhalt lautet wie folgt:

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>


#xmllint --noout --schema person.xsd person.xml
<?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.

Führen Sie diesen Code aus. Sie werden feststellen, dass die Ausgabe, die Sie erhalten, kein Fehler ist, sondern ein
#xmllint --noout --schema person.xsd person.xml
person.xml:4: element age: Schemas validity error : Element &#39;age&#39;: &#39;not age&#39; is not a valid value of the atomic type &#39;xs:integer&#39;.
person.xml:5: element sex: Schemas validity error : Element &#39;sex&#39;: [facet &#39;enumeration&#39;] The value &#39;test&#39; is not an element of the set {&#39;male&#39;, &#39;female&#39;}.
person.xml:5: element sex: Schemas validity error : Element &#39;sex&#39;: &#39;test&#39; is not a valid value of the local atomic type.
person.xml fails to validate
Array

(0) {}, erstaunlich!
Warum passiert das?

Wenn bei der Überprüfung ein Fehler auftritt, wird die Fehlermeldung aufgrund von xmllint --schema nicht über die Standardausgabe (stdout), sondern über die Standardfehlerausgabe (stderr) angezeigt.

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

Erstellen Sie zunächst ein XML-Dokument mit dem Namen po.xml und dem folgenden Inhalt:



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!

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