我正在动态创建XML文档。我需要知道我刚刚创建的Node的XPath。
我没有看到像DOMNode::calculateXPath(void):string
这样的功能
而且我不愿意自己写一篇。是否有任何已知的lite
第三方解决方案??
答案 0 :(得分:3)
前一段时间有一个类似的问题,我在其中发布了一些内容:
function calculateXPath(DOMNode $node)
{
$q = new DOMXPath($node->ownerDocument);
$xpath = '';
do
{
$position = 1 + $q->query('preceding-sibling::*[name()="' . $node->nodeName . '"]', $node)->length;
$xpath = '/' . $node->nodeName . '[' . $position . ']' . $xpath;
$node = $node->parentNode;
}
while (!$node instanceof DOMDocument);
return $xpath;
}
正如Tomasz所提到的,它绝对不像使用id那样强大或面向未来。
答案 1 :(得分:2)
给定节点没有明确的XPath,因为XPath是一个搜索查询。与谷歌一样,您可以使用不同的搜索字词查找特定页面。更重要的是,当您修改DOM树时,返回当前节点的XPath查询可能(可能会)更改,因此您可以获得的路径仅在下一次树修改完成之前有效。
您可以为每个节点提供唯一的ID或类名(当您想要使用其他ID时,类更安全 - 可以有多个类,只有一个ID)。然后你可以使用这个类/ id进行搜索。
标记范围和类unique_1 _:
的示例//span[contains(@class, 'unique_1_')]
答案 2 :(得分:2)
我知道这有点老了,但我想补充一下以防其他人正在寻找这个。
从PHP 5.2开始,DomNode::getNodePath()
扩展了DomElement
。