1

我正在尝试在一个查询中获取which 将在 which contains that 之后img出现。所以我这样做了:divdivimg

$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>

我想在一个查询中同时查询link_to_image.png...重要文本...

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 回答