php xpath语法

时间:2012-02-08 16:50:04

标签: php xpath simplexml

如果此代码:

$s = 'BrowseNodes/BrowseNode';
$temp_bnid=$item->xpath($s);
echo '<pre>
Root Search:
';
print_r($temp_bnid);
echo '</pre>';
die('Halted for testing');

给出了这个输出:

Root Search:
Array
(
    [0] => SimpleXMLElement Object
        (
            [BrowseNodeId] => 2522032011
            [Name] => Balls
            [Ancestors] => SimpleXMLElement Object
                (
                    [BrowseNode] => SimpleXMLElement Object
                        (
                            [BrowseNodeId] => 196601011
                            [Name] => Baby & Toddler Toys
                            [Ancestors] => SimpleXMLElement Object
                                (
                                    [BrowseNode] => SimpleXMLElement Object
                                        (
                                            [BrowseNodeId] => 165795011
                                            [Name] => Categories
                                            [IsCategoryRoot] => 1
                                            [Ancestors] => SimpleXMLElement Object
                                                (
                                                    [BrowseNode] => SimpleXMLElement Object
                                                        (
                                                            [BrowseNodeId] => 165793011
                                                            [Name] => Toys & Games
                                                    )

                                                )

                                        )

                                )

                        )

                )

        )

)

Halted for testing

和这段代码:

$s = 'BrowseNodes/BrowseNode[Name=Categories]';
// I also tried $s = 'BrowseNodes/BrowseNode[Name="Categories"]'; 
$temp_bnid=$item->xpath($s);
echo '<pre>
Root Search:
';
print_r($temp_bnid);
echo '</pre>';
die('Halted for testing');

给出了这个输出:

Root Search:
Array
(
)

Halted for testing

当我尝试获取包含“名称”节点的“名称”节点值为“类别”的BrowseNode节点时,我做错了什么? 针对此问题的另一种解决方案是选择存在“IsCategoryRoot”节点的节点,但我真的想学习如何进行其他查询,因为它可能在将来对我有所帮助。 Niether的方式与我所讨论的查询一起工作。

2 个答案:

答案 0 :(得分:1)

你试过这个吗?

$s="BrowseNodes/BrowseNode/Name[text()='Categories']/..";

哪个应该为Name节点选择父节点(即:browseNode),哪个文本是Categories。

答案 1 :(得分:1)

我不确定,因为我无法有效地阅读SimpleXML转储,但我认为你所拥有的是一个任意的后代,其子名为Name,包含“Categories”。如下所示:

BrowseNodes/BrowseNode//BrowseNode[Name="Categories"]