【发布时间】:2015-09-28 21:42:24
【问题描述】:
我需要在 php.ini 中获取特定节点的父节点。 我正在使用 DOMDocument 和 XPath。 我的 XML 是这样的:
<ProdCategories>
<ProdCategory>
<Id>138</Id>
<Name>Parent Category</Name>
<SubCategories>
<ProdCategory>
<Id>141</Id>
<Name>Category child</Name>
</ProdCategory>
</SubCategories>
</ProdCategory>
</ProdCategories>
php代码:
$dom = new DOMDocument();
$dom->load("ProdCategories_small.xml");
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//ProdCategory/Id[.="141"]/parent::*')->item(0);
print_r($nodes);
打印的是:
DOMElement Object ( [tagName] => ProdCategory [schemaTypeInfo] => [nodeName] => ProdCategory [nodeValue] => 141 Category child [nodeType] => 1 [parentNode] => (object value omitted) [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => (object value omitted)
[parentNode] 是 (object value omitted),为什么?我会得到 p>
<Id>138</Id>
<Name>Parent Category</Name>`
【问题讨论】:
-
您问题中设置的最后一个节点是否表示所需的输出?你的 Xpath 表达式可以重写为
//ProdCategory[Id[.="141"]],这样行吗? -
@collapsar 感谢您的回复。不,不起作用。我问题中的最后一个节点就是我想要的。
-
@collapsar - 甚至是
//ProdCategory[Id="141"] -
以下 xpath 表达式会产生您指定的结果:
//ProdCategory[Id='141']/ancestor::ProdCategory/child::*[name() = 'Id' or name()='Name']。 -
在 xpath 表达式匹配的
ProdCategory的上下文中,父节点是SubCategories。您必须使用ancestor轴才能到达外部Prodcategory- 请参阅我之前的评论。
标签: php xml xpath domdocument