3

PHP プログラムに解析する必要がある HTML の例を次に示します。

                    <div id="dump-list">    
<div class="dump-row"> 
 <div class="dump-location odd" data-jmapping="{id: 35, point: {lng: -73.00898601, lat: 41.71727402}, category: 'office'}">

    <div class="SingleLinkNoTx">
    <a href="#10" class="loc-link">Acme Software</a><br/><strong>John Doe, MBA</strong><br/>123 Main St.<br />New York, NY 10036<br /><strong class="telephone">(212) 555-1234</strong><br/>
    </div><!-- END.SingleLinkNoTx -->

    <a href="http://www.example.com" target="_blank" class="web_link">Visit Website</a><span><br />(0.3 miles)</span>   
    <div class="loc-info">
            <div class="loc-info-text ">
        John Doe, MBA<br /><a href="http://maps.google.com/?daddr=41.71727402,-73.00898601" target="_blank">Get Directions &raquo;</a>    
        </div>

    </div>

</div>

これは、上記の HTML の例から PHP に抽出したい情報です。

lng: -73.00898601, lat: 41.71727402
category: 'office'
Acme Software
John Doe, MBA
123 Main St.
New York, NY 10036
(212) 555-1234
http://www.example.com

PHP Simple HTML DOM Parser を使用してみましたが、初めてなので、必要なことに関連する実際の PHP の例が見つかりません。これがどのように機能するかを理解するために、このような PHP コードをいくつか試してみましたが、var_dump($e) は大量の出力を生成し、再帰に関するメッセージが var_dump に含まれています。だから私はこれを本当に使う方法を失っています。親切な助けに感謝します!

$e = $html->find('.dump-location', 0)->find('.SingleLinkNoTx', 0);
echo $e;
var_dump($e);
4

1 に答える 1

4

XPath を使用して、HTML/XML ドキュメント内の要素を見つけて抽出します。具体的にはSimpleXMLElement::xpathメソッドを使用します。

次の例では、場所の電話番号を検索します。

$doc = new DOMDocument();
$doc->loadHTML('your html snippet goes here - or use loadHTMLFile()');
$xml = simplexml_import_dom($doc);
$elements = $xml->xpath('//*[contains(@class, "dump-location")]/div[@class="SingleLinkNoTx"]/strong[@class="telephone"]');
print_r($elements);

最も複雑な部分は XPath 式です。簡単な内訳:

  1. //
    • このルールは、ドキュメント内のすべての要素にルールを再帰的に適用するようにパーサーに指示します。
  2. *[contains(@class, "dump-location")]
    • dump-locationクラスを持つすべての要素に一致します
  3. /
    • dump-location親を持つ要素にのみ次のルールを適用するようにパーサーに指示します。
  4. div[@class="SingleLinkNoTx"]
    • クラスを持つ(他のクラス名を持たない)任意のDIV要素に一致します。SingleLinkNoTx
  5. strong
    • クラスSTRONGを持つすべてのタグに一致するルール。telephone

質問で提供された HTML スニペットでこの XPath 式を使用すると、次のような出力が得られます。以下から情報を反復して抽出するのはかなり簡単です。

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [class] => telephone
                )

            [0] => (212) 555-1234
        )

)

ドキュメントの構造がわかっている場合は、抽出する各情報に対して XPath 式を作成できます。または、より一般的な XPath 式 (たとえば、すべてのdump-location要素を取得する式) を使用して、要素を手動で反復処理する方が簡単な場合もあります。

于 2012-09-09T21:20:36.230 に答える