我需要循环访问Ancestors
节点以获取相应的BrowseNodeId
和Name
值。我如何使用XPath执行此操作?我想是这样的下面,但它不工作:PHP/XPath:使用SimpleXML对XML中的祖先节点进行迭代使用SimpleXML
//BrowseNode[1]//Ancestors[1]/BrowseNode/BrowseNodeId/text()
//BrowseNode[1]//Ancestors[1]/BrowseNode/Name/text()
我认为的XPath //Ancestors
部分实际上是搜索整个XML树。我需要做的是访问每个节点以获取所需的值。我该怎么做呢?在下面的例子中,我想要:欧洲 - >历史 - >主题 - >书籍。
示例XML:
<BrowseNode>
<BrowseNodeId>4952</BrowseNodeId>
<Name>France</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>4935</BrowseNodeId>
<Name>Europe</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>9</BrowseNodeId>
<Name>History</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>1000</BrowseNodeId>
<Name>Subjects</Name>
<IsCategoryRoot>1</IsCategoryRoot>
<Ancestors>
<BrowseNode>
<BrowseNodeId>283155</BrowseNodeId>
<Name>Books</Name>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
@Alejandro的答案比你接受的答案要好。接受的答案实际上是错误的,因为根本没有获得任何节点:XPath表达式`/ Ancestors/BrowseNode`没有选择任何节点,因为你的XML文档没有名为`Ancestors`的顶层元素。请考虑接受正确的答案,因为接受错误的答案可能会误导他人。 – 2011-01-08 17:10:45