Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP实现DOMXPath联合提取_Php_Xpath_Domxpath - Fatal编程技术网

用PHP实现DOMXPath联合提取

用PHP实现DOMXPath联合提取,php,xpath,domxpath,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
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\uu%randomNumber%”重复多次


…一些文本。。。
…另一个文本。。。
…重要文本。。。

我想在一个查询中同时得到链接到\u image.png和重要文本…

您的查询似乎是正确的

XML示例:

<div>
    <div id="someid-1"><img src="foo"/></div>
    <div class="spec_class">bar</div>
    <div class="spec_class">baz</div>
</div>
输出():


请注意,您必须迭代XPath查询返回的DOMNodeList。

您的查询似乎是正确的

XML示例:

<div>
    <div id="someid-1"><img src="foo"/></div>
    <div class="spec_class">bar</div>
    <div class="spec_class">baz</div>
</div>
输出():


请注意,您必须迭代XPath查询返回的DOMNodeList。

应该可以工作。请参阅此处:应该可以工作。请参阅此处:我删除了
/text()
,并且它可以工作(在单独的查询中)。我想这是因为
spec\u class
div也包含html标记。但它仍然不能与union一起工作。这真的很奇怪。我将尝试进行更多调查,并将在这里发布答案(如果我找到的话)。@msgdie当spec\u class div中有其他元素时,它应该与
//text()一起工作
。Eclipse中的XPath模块随后返回文本节点。但是,它在PHP中不起作用,这可能是因为PHP仅支持XPath 1.0。是的,它在PHP中不起作用。您是否有任何建议或线索,说明为什么它在单独的查询中工作得很好,但在联合中却不工作?可能是什么原因导致这种行为?提前谢谢。顺便说一句,I c他在我的xpath查询中使用了完全相同的标记(我从另一个站点获得的),它在我的php代码中工作,但在我的php代码中不工作。可能是某种php错误吗?@msgdie我不太清楚。我怀疑是xpath版本问题(php仅支持1.0)或是底层libxml中的错误。我删除了
/text()
,它工作了(在另一个查询中)。我认为这是因为
spec_class
div也包含html标记。但它仍然不能与union一起工作。这真的很奇怪。我将尝试进行更多调查,并将答案发布在这里(如果我找到的话)。@msgdie当spec_class div中有其他元素时,它应该与
//text()一起工作
。Eclipse中的XPath模块随后返回文本节点。但是,它在PHP中不起作用,这可能是因为PHP仅支持XPath 1.0。是的,它在PHP中不起作用。您是否有任何建议或线索,说明为什么它在单独的查询中工作得很好,但在联合中却不工作?可能是什么原因导致这种行为?提前谢谢。顺便说一句,I c他在我的xpath查询中使用了完全相同的标记(我从另一个站点获得),它在我的php代码中工作,但在我的php代码中不工作。可能是php错误吗?@msgdie我不太清楚。我怀疑是xpath版本问题(php只支持1.0)还是底层libxml中的错误。
$dom = new DOMDocument;
$dom->loadXml($xhtml);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//div…') as $node) {
    echo $dom->saveXML($node);
}
<img src="foo"/>bar