使用DomDocument PHP获取Xpath父节点?

前端之家收集整理的这篇文章主要介绍了使用DomDocument PHP获取Xpath父节点?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在PHP获取特定节点的父节点.
我正在使用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]是(对象值省略),为什么?我会的

<Id>138</Id>

    <Name>Parent Category</Name>`

The [parentNode] is (object value omitted),why?

这是因为您使用print_r function并创建了这样的输出(via an internal helper function of the dom extension).创建此代码代码行是:

print_r($nodes);

当DOMNode使用print_r或var_dump时,字符串“(对象值省略)”由DOMNode给出.它告诉您,该字段的对象值(名为parentNode)不会显示但会被省略.

从该消息可以得出结论,该字段具有作为对象的值.对类名进行简单检查可以验证:

echo get_class($nodes->parentNode),"\n"; # outputs  "DOMElement"

将其与整数或(空)字符串的字段进行比较:

[nodeType] => 1
...
[prefix] => 
[localName] => ProdCategory

所以我希望这能为你解决这个问题.只需访问该字段即可获取父节点对象:

$parent = $nodes->parentNode;

并做了.

如果你想知道PHP给你的某个字符串,你感觉它可能是内部的,你可以在http://lxr.php.net/,here is an example query for the string in your question快速搜索所有PHP代码库.

猜你在找的PHP相关文章