DOMXPath联合提取与PHP

时间:2012-01-06 15:36:42

标签: php xpath domxpath

我正在尝试在一个查询中获取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 ...重要文字......

1 个答案:

答案 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。