如果此代码:
$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的方式与我所讨论的查询一起工作。
答案 0 :(得分:1)
$s="BrowseNodes/BrowseNode/Name[text()='Categories']/..";
哪个应该为Name节点选择父节点(即:browseNode),哪个文本是Categories。
答案 1 :(得分:1)
我不确定,因为我无法有效地阅读SimpleXML转储,但我认为你所拥有的是一个任意的后代,其子名为Name,包含“Categories”。如下所示:
BrowseNodes/BrowseNode//BrowseNode[Name="Categories"]