1

私は取得しようとしimgていますが、それを含むdivの後に続くものをすべて1つのクエリで取得しようとしています。だから私はこれをしました:divimg

$nodes = $xpath->query('//div[starts-with(@id, "someid")]/img | 
//div[starts-with(@id, "someid")]/following-sibling::div[@class="spec_class"][1]/text()');

これで、タグの属性を取得できましたimgが、次の兄弟のテキストを取得できません。クエリを分離すると(2つのクエリ-最初imgは兄弟用、2番目は兄弟用)動作します。しかし、1つのクエリだけでこれを行うにはどうすればよいですか?ちなみに、構文に誤りはありません。しかし、どういうわけか、ユニオンが機能しないか、兄弟コンテンツを正しく抽出していない可能性があります。

これがマークアップです(別のテキストで何度も繰り返されますid="someid_%randomNumber%

<div id="someid_1">
    <img src="link_to_image.png" />
    ...some text...
</div>

<div>...another text...</div>

<div class="spec_class">
...Important text...
</div>

link_to_image.png...重要なテキストの両方を1つのクエリで取得したい...

4

1 に答える 1

1

クエリは正しいようです。

XMLの例:

<div>
    <div id="someid-1"><img src="foo"/></div>
    <div class="spec_class">bar</div>
    <div class="spec_class">baz</div>
</div>

PHPコードの例:

$dom = new DOMDocument;
$dom->loadXml($xhtml);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//div…') as $node) {
    echo $dom->saveXML($node);
}

出力(デモ):

<img src="foo"/>bar

XPathクエリによって返されるDOMNodeListを繰り返す必要があることに注意してください。

于 2012-01-06T16:05:30.927 に答える