ホームページ  >  記事  >  バックエンド開発  >  PHP が xmllint コマンドを使用して XML と HTML を処理する方法、xmllintxml_PHP チュートリアル

PHP が xmllint コマンドを使用して XML と HTML を処理する方法、xmllintxml_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:11:35928ブラウズ

PHP は、xmllint コマンドを使用して XML と HTML を処理します (xmllintxml)。

この記事の例では、PHP が xmllint コマンドを使用して xml と html を処理する方法を説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

xmllint は、xml の処理と検証、および html の処理に非常に便利なツールです。Linux では、libxml2 がインストールされている限り、このコマンドを使用できます。まず、--html パラメーターと --xpath パラメーターを使用して HTML を処理する例を見てみましょう:

例は次のとおりです:


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

[あなたのクエリ]:8.8.8.8 このサイトの主なデータ:

アメリカ合衆国 このサイトの補助データ: Google Public DNS 提供:hypo
米国 Google の無料 Google Public DNS が提供するもの: zwstar 参照データ 1: 米国
参考データ2:アメリカ

他の主要なパラメータの使用法を例を挙げて見てみましょう。

1、 --format


このパラメータは、読みやすいように XML をフォーマットするために使用されます。 次の内容の xml (person.xml) があるとします。


コードをコピーします

コードは次のとおりです:<人><名前>ボール<年齢>30男性
次の操作を実行すると、出力はより読みやすい XML 形式になります:

コードをコピーします

コードは次のとおりです:#xmllint --format person.xml
ボール
<年齢>30
<性別>男性



2. --ノーブランク

--format とは逆に、送信量を節約するために、xml 内の空白を削除したい場合があります。この場合は、--noblanks コマンドを使用できます。 xml(person.xml)の内容が以下のようだとします


コードをコピーします
コードは次のとおりです:
ボール
<年齢>30
<性別>男性


このパラメータ操作を実行した後の出力結果は次のようになります:

コードをコピーします

コードは次のとおりです:#xmllint --noblanks person.xml
ボール名前>30男性性別>人>


3、--スキーマ

scheam を使用して XML ファイルの正しさを検証します (XML スキーマは XML ベースの DTD の置き換えです) xmlファイル(person.xml)とscheamファイル(person.xsd)があるとします 内容は以下の通りです
person.xml



コードをコピーします
コードは次のとおりです:
ボール
<年齢>30
<性別>男性


person.xsd


コードをコピーします
コードは次のとおりです:

   
     
     
     
       
         
           
           
         
       

     
     
       
         
           
           
           
         

       

     
   

以下のようにコマンドを実行した後の結果は:

复制代価代価如下:
#xmllint --schema person.xsd person.xml

   
      ボール
      <年齢>30
      <性別>男性
   

person.xml が検証します
注: 承認の場合、承認後には承認されたファイルの内容が出力されますが、 --noout オプションを使用してこの出力を削除すると、最後の承認結果のみを取得できます。

复制代码代码如下:
#xmllint --noout --schema person.xsd person.xml
person.xml は検証します
次に、person.xml を変更して、このファイルの年齢フィールドと性別が xsd の定義に一致しないようにします。

复制代码代码如下:#xmllint --noout --schema person.xsd person.xml
person.xml:4: 要素 age: スキーマ妥当性エラー: 要素 'age': 'not age' はアトミック タイプ 'xs:integer' の有効な値ではありません。
person.xml:5: 要素の性別: スキーマの妥当性エラー: 要素 'sex': [ファセット '列挙'] 値 'test' はセット {'male', ' Female'} の要素ではありません。
person.xml:5: 要素の性別: スキーマの妥当性エラー: 要素 'sex': 'test' はローカル アトミック タイプの有効な値ではありません。
person.xml の検証に失敗します

xmllint の成功の成果を確認できます!

4、--スキーマの出力について

在讲输出前先看下一场景,假如你想通過php実行xmllint然后到返結果,你的代コード通常应该是这个样子valid.php


复制代码代码如下: $command = "xmllint --noout --schema person.xsd person.xml";
exec($command, $output, $retval);
//出错時に返值不値0
if ($retval != 0){
    var_dump($output);
}
他{
    エコー「そうだね!」;
}

エラーは上記の 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 ドキュメントを作成します。

コードをコピーします コードは次のとおりです:

<発送先国="米国">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
<請求先国 = "米国">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
急いで、うちの芝生が荒れてます!

<アイテムパーツ番号="872-AA">
芝刈り機
<数量>1
148.95
これが電気であることを確認してください

<アイテムパーツ番号="926-AA">
                                                                                                                                                                      <数量>1
&lt; usprice&gt; 39.98&lt;/usprice&gt;
1999-05-21




次に、po.xml 用に作成されたスキーマ ファイルの名前は po.xsd となり、内容は次のとおりです。


コードをコピーします

コードは次のとおりです:

 
 
   Example.com の注文書スキーマ
   著作権は 2000 Example.com にあります。無断転載を禁じます。
 

 
 
 
 
 
  
  
  
  
 

 
 

 
 
  
  
  
  
  
 

  www.jb51.net
 

 
 
  
   
    
     
     
      
       
        
       
      

     
     
     
     
    

    
   

  
 

 

 
 
 
  
 
 


xmllint 对 po.xml 文件进行校验を使用:
倍制コード 代コードは次のようになります:
$ xmllint -schema po.xsd po.xml
場合は問題がない場合、通知は校閲を通過します。 ここで説明されている大規模な PHP プログラムの設計が役立つことを望みます。

http://www.bkjia.com/PHPjc/928228.html

本当http://www.bkjia.com/PHPjc/928228.html技術記事 PHP は、xmllint コマンドを使用して xml を html で処理する方法、xmllintxml では、PHP で xmllint コマンドを使用して、xml を html で処理する方法について説明します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。