サーチ…


文字列からHTMLを解析する

PHPはDOM Level 2準拠のパーサーを実装しているので、 getElementById()appendChild()などの使い慣れたメソッドを使用してHTMLを処理できます。

$html = '<html><body><span id="text">Hello, World!</span></body></html>';

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);

echo $doc->getElementById("text")->textContent;

出力:

Hello, World!

PHPがHTMLの問題について警告を発することに注意してください。特に、ドキュメントフラグメントをインポートする場合は注意が必要です。これらの警告を回避するには、HTMLをインポートする前にlibxml_use_internal_errors()呼び出して、独自のエラーを処理するようにDOMライブラリ(libxml)にlibxml_use_internal_errors()します。必要であれば、 libxml_get_errors()を使用してエラーを処理できます。

XPathの使用

$html = '<html><body><span class="text">Hello, World!</span></body></html>';

$doc = new DOMDocument();
$doc->loadHTML($html);

$xpath = new DOMXPath($doc);
$span = $xpath->query("//span[@class='text']")->item(0);

echo $span->textContent;

出力:

Hello, World!

SimpleXML

プレゼンテーション

  • SimpleXMLは、XML文書を扱う簡単な方法を提供するPHPライブラリーです(特に、XMLデータの読み取りと反復)。

  • 唯一の制約は、XML文書が整形式でなければならないということです。

手続き型アプローチを使用したXMLの解析

// Load an XML string
$xmlstr = file_get_contents('library.xml');
$library = simplexml_load_string($xmlstr);

// Load an XML file
$library = simplexml_load_file('library.xml');

// You can load a local file path or a valid URL (if allow_url_fopen is set to "On" in php.ini

OOPアプローチを使用してXMLを解析する

// $isPathToFile: it informs the constructor that the 1st argument represents the path to a file,
// rather than a string that contains 1the XML data itself.

// Load an XML string
$xmlstr = file_get_contents('library.xml');
$library = new SimpleXMLElement($xmlstr);

// Load an XML file
$library = new SimpleXMLElement('library.xml', NULL, true);

// $isPathToFile: it informs the constructor that the first argument represents the path to a file, rather than a string that contains 1the XML data itself.

子と属性へのアクセス

  • SimpleXMLはXMLドキュメントを解析するときに、そのXML要素またはノードをすべて結果のSimpleXMLElementオブジェクトのプロパティに変換します
  • さらに、XML属性を、属しているプロパティからアクセス可能な連想配列に変換します。

あなたがその名前を知っているとき:

$library = new SimpleXMLElement('library.xml', NULL, true);
foreach ($library->book as $book){
    echo $book['isbn'];
    echo $book->title;
    echo $book->author;
    echo $book->publisher;
}
  • このアプローチの主な欠点は、XML文書内のすべての要素と属性の名前を知る必要があることです。

あなたがその名前を知らないとき(またはあなたがそれらを知りたくないとき):

foreach ($library->children() as $child){
    echo $child->getName();
    // Get attributes of this element
    foreach ($child->attributes() as $attr){
        echo ' ' . $attr->getName() . ': ' . $attr;
    }
    // Get children
    foreach ($child->children() as $subchild){
        echo ' ' . $subchild->getName() . ': ' . $subchild;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow