2

Web サイトから特定の生のテキストを取得しようとしています。このサイトと他の情報源を使用して、simpleXML と xpath を使用して特定の画像を取得する方法を学びました。

ただし、生のテキストを取得するために同じアプローチが機能していないようです。現在機能していないのは次のとおりです。

// first I set the xpath of the div that contains the text I want
$xpath = '//*[@id="storyCommentCountNumber"]';

// then I create a new DOM Document
$html = new DOMDocument();

// then I fetch the file and parse it (@ suppresses warnings).
@$html->loadHTMLFile($url);

// then convert DOM to SimpleXML
$xml = simplexml_import_dom($html);   

// run an XPath query on the div I want using the previously set xpath
$commcount = $xml->xpath($xpath);
print_r($commcount);

画像を取得すると、その commcount オブジェクトは画像ソースを含む配列を返します。

この場合、そのオブジェクトが「storyCommentCountNumber」div に含まれる生のテキストを返すようにします。しかし、そのテキストはオブジェクトに含まれているようには見えず、Div の名前だけです。

私は何を間違っていますか?このアプローチは、生のテキストではなく、HTML 要素とその内部のビットを取得するためだけのものであることがわかります。そのdiv内のテキストを取得するにはどうすればよいですか?

ありがとう!

4

5 に答える 5

2

注意すべきことの 1 つは、SimpleXML オブジェクトで print_r または var_dump を使用している場合、オブジェクトの「テキスト」(場合によっては属性) が表示されないことです。したがって、すべてを表示するには、$variable->AsXml() を使用して完全な XML 文字列を出力する必要があります。

テキストを取得するには、SimpleXml オブジェクトを文字列にキャストする必要があります。これにより、innerText が自動的に引き出されます。

 /* remember $commcount is always an array from the xpath */
 foreach($commcount as $str)
 {
     echo (string)$str;
 }

うまくいけば、上記があなたの出発点になるでしょう。

于 2009-01-02T20:12:22.100 に答える
1

SimpleXMLを使おうとしていることは知っていますが、正規表現を使用すると、生のテキストを取得する方が簡単だと思います。

于 2009-01-28T15:24:23.763 に答える
1

HTMLのサンプル(選択している要素の前後の数行を含む)とprint_r()からの出力を含めることができますか?

次のことを試して、役立つかどうかを確認してください。

if ( count($commcount) > 0 ) {
    $divContent = $commcount[0]->asXml();
    print $divContent;
}
于 2009-01-01T19:58:08.147 に答える
0

このページをチェックしてみてください。

:)

于 2009-01-01T01:12:26.407 に答える
0

div 内の生のテキストは、div 要素自体の一部ではなく、div 要素の最初の子ノードの一部です。探しているデータを含むテキスト ノードが div 内にあるはずです。

于 2009-01-28T15:33:39.207 に答える