xml – xpath / descendant-or-self – 搜索特定树中的节点
我正在阅读快捷方式’//’,这显然是一条捷径:
“/后裔或自身” 很明显,从这样一个表达的一个简单例子可以期待什么, // MYNODE 它将返回文档中所有实例的节点列表,这些实例位于根目录中,名为“myNode”. 但是,更复杂的表达式的含义是什么,例如: // //阳极MYNODE ? 因为//(作为’/ descendant-or-self’的快捷方式)匹配根节点两次, ‘// myNode’和’// aNode // myNode’会产生完全相同的结果吗? 最后,如果我在文档中搜索节点’myNode’的实例,它是节点’interestingTree’的间接后代.但我不希望节点’myNode’的实例是节点’nonInterestingTree’的间接后代, 例如,在文档中搜索: <root> <anode> <interestingTree> <unknownTree> <myNode/><!-- I want to find this one,not the other,where I don't know the path indicated by 'unknownTree' --> </unknownTree> </interestingTree> <nonInterestingTree> <unknownTree> <myNode/> </unknownTree> </nonInterestingTree> </anode> <anode> <someOtherNode/> </anode> </root> 谢谢! 解决方法
是的,在这种情况下,因为所有myNodes也是阳极的后代.然而,在一般意义上,// aNode // myNode显然不匹配其祖先树中没有阳极父节点的节点. xpath: //aNode//myNode 将忽略aNode和myNode之间的任何中间层次结构,即它将匹配/ aNode / myNode,/ anyNodes / anode / myNode和/ anyNodes / anode / xyzNode / myNode 这回答了您的上一个问题,您可以在有趣的子路径中找到节点,如下所示:(并再次忽略层次结构中的任何中间元素) //anode//interestingTree//myNode 理想情况下,当然,您应该尽可能明确地使用您的路径,因为//可能会因为搜索所需的大量元素而导致性能开销. 编辑可能这有帮助吗? 为了清晰起见,我调整了你的xml输入: <root> <anode> <interestingTree> <unknownTree> <myNode> MyNode In Interesting Tree </myNode> </unknownTree> </interestingTree> <nonInterestingTree> <unknownTree> <myNode> MyNode In Non-Interesting Tree </myNode> </unknownTree> </nonInterestingTree> </anode> <anode> <someOtherNode/> </anode> <bnode> <myNode> MyNode in BNode </myNode> </bnode> </root> 通过样式表解析时: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> Matched by `//myNode` <xsl:apply-templates select="//myNode"> </xsl:apply-templates> Matched by `//aNode//myNode` <xsl:apply-templates select="//anode//myNode"> </xsl:apply-templates> Matched by `//aNode//interestingTree//myNode` <xsl:apply-templates select="//anode//interestingTree//myNode"> </xsl:apply-templates> </xsl:template> <xsl:template match="myNode"> <xsl:value-of select="text()"/> </xsl:template> </xsl:stylesheet> 返回以下内容: Matched by `//myNode` MyNode In Interesting Tree MyNode In Non-Interesting Tree MyNode in BNode Matched by `//aNode//myNode` MyNode In Interesting Tree MyNode In Non-Interesting Tree Matched by `//aNode//interestingTree//myNode` MyNode In Interesting Tree (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |