0

私はwebapgeからの特定の値を求めています。h1タグに含まれる製品名:

<div id="extendinfo_container">
  <a href="/someproduct.html"><h1><strong>Product Name</strong></h1></a>
  <div style="font-size:0;height:4px;"></div>
  <p class="text_breadcrumbs">
  <a href="/Our-Brands.html" target="_self"><img src="arrow_091.gif" align="absmiddle"/></a>
  <a href="/someproduct.html" target="_self" class="link_breadcrumbs">Product Name</a><img src="arrow_091.gif" align="absmiddle"/>
  <strong>Product Name</strong>
  <div class="dotted_line_blue">
    <img src="theme_shim.gif" height="1" width="100%" alt=" " />
  </div>
</div>

これは、複数のh1を含む構造が不十分なWebサイトであるため、getElementById('h1')を単純に実行することはできません。

どの要素を取得するかをできるだけ具体的にしたいと思います。これが私が持っているコードです。

$doc = new DOMDocument();
@$doc->loadHTML(file_get_contents('http://url/to/website'));

// locate <div id="extendinfo_container"><a><h1><strong>(.*)</strong></h1></a> as product name
$x = new DOMXPath($doc);
$pName = $x->query('//div[@id="extendinfo_container"]/a/h1/strong');
var_dump($pName->nodeValue);

これはリターンnullです。必要なコンテンツを取得するには、どのクエリを使用する必要がありますか?

4

3 に答える 3

1

query()DOMNodeListプロパティを持たないを返しnodeValueます。1つの要素(つまり最初の要素)を選択する必要があります。

$pName = $x->query('//div[@id="extendinfo_container"]/a/h1/strong')->item(0);

またはそれを繰り返します:

foreach( $pName as $el) {
    var_dump( $el->nodeValue);
}

DOMNodeこれらのいずれかを使用すると、探しているものにアクセスできます。

于 2012-07-20T14:28:04.040 に答える
0

PHPのDOMは、ロードするhtmlについて非常に慎重ですわずかに不正な形式のドキュメントでも、バーフしてロードを拒否します。

エラー抑制をオフにし(@$doc->loadHTML、を削除します@)、分析しようとしているこのページを突っ込んでいないことを確認します。それ以外の場合、XPathクエリは正常に表示され、ドキュメントが適切にロード/解析される場合は、機能する必要があります。

于 2012-07-20T14:27:58.580 に答える
0

クエリは正常に機能します。値に間違ってアクセスしていました。値にアクセスする正しい方法は次のとおりです。

var_dump($pName->item(0)->nodeValue);

于 2012-07-20T14:30:11.013 に答える