Verwenden Sie den Befehl xmllint, um XML zu verarbeiten

PHPz
Freigeben: 2017-04-02 11:10:56
Original
4422 Leute haben es durchsucht

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/<[^>]*>//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:


ball30 male
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>
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren


3 . --schema
#xmllint --noblanks person.xml
    <?xml version="1.0"?>
    <person><name>ball</name><age>30</age><sex>male</sex></person>
Nach dem Login kopieren


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>
Nach dem Login kopieren
Nach dem Login kopieren


#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>
Nach dem Login kopieren
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>
Nach dem Login kopieren
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
Nach dem Login kopieren
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!";
    }
Nach dem Login kopieren


$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:



Dann schreiben Sie po.xml Das Schema Die Datei heißt po.xsd und hat den folgenden Inhalt:



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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!