XPath 1.0最近的前一个和/或祖先节点,在XML Tree中具有一个属性
发布时间:2020-12-16 08:00:47 所属栏目:百科 来源:网络整理
导读:这里有三个XML树 (1) ?xml version="1.0" encoding="UTF-8"?content section id="1" section id="2"/ section id="3"/ section id="9"/ /section section id="4" section id="5" section bookmark/ section id="6" section id="7" section id="8"/ /section
这里有三个XML树
(1) <?xml version="1.0" encoding="UTF-8"?> <content> <section id="1"> <section id="2"/> <section id="3"/> <section id="9"/> </section> <section id="4"> <section id="5"> <section> <bookmark/> <section id="6"> <section id="7"> <section id="8"/> </section> </section> </section> </section> </section> </content> (2) <?xml version="1.0" encoding="UTF-8"?> <content> <section id="1"/> <section id="2"> <section id="9"> <section id="10"> <section id="11"/> </section> </section> <section> <section id="4"> <section id="5"/> </section> </section> <section/> <bookmark/> <section id="6"> <section id="7"> <section id="8"/> </section> </section> </section> </content> 在所有情况下,所需的结果为id 5。 使用XSLT 1.0和XPath 1.0,我可以从(1) <xsl:value-of select="//bookmark/ancestor::*[@id][1]/@id"/> 或来自(2)的前一节点 <xsl:value-of select="//bookmark/preceding::*[@id][1]/@id"/> 如何从我的书签获取最近的祖先或前一个节点的ID? 编辑: 解决方案也应该涵盖这一结构。所需ID仍然是5。 (3) <?xml version="1.0" encoding="UTF-8"?> <content> <section id="1"> <section id="2"/> <section id="3"/> <section id="9"/> </section> <section id="4"> <section> <section id="10"/> <section id="5"/> <section> <bookmark/> <section id="6"> <section id="7"> <section id="8"/> </section> </section> </section> </section> </section> </content>
使用:
(//bookmark/ancestor::*[@id][1]/@id | //bookmark/preceding::*[@id][1]/@id ) [last()] 验证:使用XSLT作为XPath的主机,进行以下转换: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/"> <xsl:value-of select= "(//bookmark/ancestor::*[@id][1]/@id | //bookmark/preceding::*[@id][1]/@id ) [last()]"/> </xsl:template> </xsl:stylesheet> 当应用于任何提供的三个XML文档时,会产生所需的正确结果: 五 我强烈推荐使用XPath Visualizer播放/学习XPath。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |