Php 在给定元素下通过XPath进行搜索

Php 在给定元素下通过XPath进行搜索,php,dom,xpath,Php,Dom,Xpath,在PHP中,我知道在DOM上执行XPath查询的唯一方法是,with仅适用于DOMDocument: public __construct ( DOMDocument $doc ) 相对于doElement,是否有类似的搜索机制? 问题是,我需要搜索一个与domeElement相对应的基本XPath(我无法控制) 我试着做: $domElement->getNodePath() . '/' . $xPath; 但是,如果XPath包含|(或字符),则这种方法不起作用。是的。元素也是文档

在PHP中,我知道在DOM上执行XPath查询的唯一方法是,with仅适用于
DOMDocument

public __construct ( DOMDocument $doc )
相对于
doElement
,是否有类似的搜索机制?

问题是,我需要搜索一个与
domeElement
相对应的基本XPath(我无法控制)

我试着做:

$domElement->getNodePath() . '/' . $xPath;

但是,如果XPath包含
|
(或字符),则这种方法不起作用。

是的。元素也是文档的一部分,因此可以使用文档的xpath对象,但在运行查询时,还有第二个参数,即第一个参数中的查询与之相关的上下文节点:

// query all child-nodes of $domElement
$result = $xpath->query('./*', $domElement);

看。

@本杰明:没问题,有一些陷阱,路径应该写相对的,这就是为什么我把点放在前面。这将为您提供一个基于上下文的xpath查询的良好开端。在SimpleXML中,它自动与调用xpath方法的元素相对。这应该没问题,我主要使用来自CSS选择器到xpath库的xpath表达式,基本上都是以类似于
后代或自我::
@hakre我亲爱的朋友路径应该是相对写的这是我一直在寻找的语句,非常重要!我很困惑为什么我总是在使用
/div[@class='some row']
之类的东西时获取所有元素,现在我知道要在特定的domeElement中搜索,需要指定相对路径,比如
/div[@class='some row']
。谢谢我想这是您会喜欢的:这是我在php中操作DOM的唯一方法。它非常整洁;)我知道QueryPath,但如果可以只使用内置DOM,我想避免使用它。QueryPath使用PHP的SimpleXML,所以可以,继续使用它。不,不可以,我知道有外部库可以完成这项工作,我只是试图限制依赖项的数量!另外,我需要返回一个
domeElement
s数组,它们与我正在处理的文档中的实例相同,而不是苍白副本。所以我不能混合使用DOM和其他库,特别是如果它是基于SimpleXML的。