xmllint コマンドを使用して XML を処理する

PHPz
リリース: 2017-04-02 11:10:56
オリジナル
4436 人が閲覧しました

curl http://www.php.cn /ip/?q=8.8.8.8 2>/dev/null --html --xpath "//ul[@id='csstb' ]" - 2>/dev/null | sed -e 's/<[^>]*>//g'
上記の例では、主に 123cha の IP アドレスの所有権をクエリし、その後pass 結果(ul#csstb)を抽出し、テキスト部分の内容のみを取得します。上記のスクリプトステートメントを実行した結果は次のとおりです:


[クエリ]:8.8.8.8
このサイトのメインデータ:
米国
このサイトの二次データ: Google Public DNS 提供元:hypo
US Google's無料の Google Public DNS 提供: zwstar 参考データ 1: 米国
参考データ 2: 米国
他の主なパラメータの使用法を例を挙げて見てみましょう。

1. --format

このパラメータは、XML を読み取れるようにフォーマットするために使用されます。
xml (人) があるとします。次の操作を実行すると、出力はより読みやすい XML 形式になります:

#xmllint --format person.xml
    <?xml version="1.0"?>
    <person>
      <name>ball</name>
      <age>30</age>
      <sex>male</sex>
    </person>
ログイン後にコピー

2。 --noblanks

は --format の逆です。送信を節約するために時々使用されます。この場合、 --noblanks コマンドを使用できます。

xmlの内容(person.

DTD

代替)

xmlファイル(person.xml)とscheamファイル(person.xsd)のファイルがあり、その内容は以下の通りであるとします

person.xml

<?xml version="1.0"?>
    <person>
      <name>ball</name>
      <age>30</age>
      <sex>male</sex>
    </person>
ログイン後にコピー
ログイン後にコピー

person.xsd

#xmllint --noblanks person.xml
    <?xml version="1.0"?>
    <person><name>ball</name><age>30</age><sex>male</sex></person>
ログイン後にコピー

次のコマンドを実行すると、結果は次のようになります:

<?xml version="1.0"?>
    <person>
      <name>ball</name>
      <age>30</age>
      <sex>male</sex>
    </person>
ログイン後にコピー
ログイン後にコピー
person.xml は検証します 注: デフォルトでは、検証されたファイルの内容は検証後に出力されます。 --noout オプションを使用できます。この出力を削除して、最終的な検証結果のみを取得できるようにします。

#xmllint --noout --schema person.xsd person.xml

person.xml は検証します
今度は、このファイルの年齢フィールドと性別が 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>
ログイン後にコピー

xmllint がエラーを正常に報告したことがわかります。

4. --schema の出力について

出力について話す前に、次のシナリオを見てみましょう。php を通じて xmllint を実行して戻り結果を取得したい場合、コードは通常、この valid.php のようになります。

#xmllint --schema person.xsd person.xml
    <?xml version="1.0"?>
    <person>
      <name>ball</name>
      <age>30</age>
      <sex>male</sex>
    </person>
ログイン後にコピー

エラーは上記の person.xml に保存されます。
このコードを実行すると、得られる出力はエラーではないことがわかりますが、
array
(0) {}、素晴らしいですね。

なぜこれが起こっているのですか?


xmllint --schema により、検証中にエラーが発生した場合、エラー メッセージは標準出力 (stdout) には表示されず、標準エラー (stderr) に表示されます。

exec の出力パラメータは、標準出力 (stdout) で表示される内容のみを取得できます。

そのため、エラー メッセージを取得するには、標準エラーを標準出力にリダイレクトし、それに応じてコードを変更する必要があります。

$command = "xmllint --noout --schema person.xsd person.xml 2> $1";
valid.php を再度実行すると、エラー メッセージが正常に表示されます。

まず、次の内容を含む po.xml という名前の XML ドキュメントを作成します:

#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
ログイン後にコピー

次に、次の内容を含む po.xsd という名前の po.xml のスキーマ ファイルを作成します。

<?php
    $command = "xmllint --noout --schema person.xsd person.xml";
    exec($command, $output, $retval);
    //出错时返回值不为0
    if ($retval != 0){
            var_dump($output);
    }
    else{
        echo "yeah!";
    }
ログイン後にコピー

xmllint を使用して po.xml ファイルを検証します:


$ xmllint -schema po.xsd po.xml エラー メッセージがない場合は、検証が成功したことを意味します。

以上がxmllint コマンドを使用して XML を処理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート