我正在尝试在一个查询中获取img
以及div
之后的div
,其中img
包含$nodes = $xpath->query('//div[starts-with(@id, "someid")]/img |
//div[starts-with(@id, "someid")]/following-sibling::div[@class="spec_class"][1]/text()');
。
所以我这样做了:
img
现在,我能够获得img
标签的属性,但我无法获得以下兄弟的文本。如果我将查询分开(两个查询 - 首先是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>
重复多次)
{{1}}
我想在一个查询中获得 link_to_image.png 和 ...重要文字......
答案 0 :(得分: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);
}
输出(demo):
<img src="foo"/>bar
请注意,您必须迭代XPath查询返回的DOMNodeList。