Xml 获取元素位置()
假设您有一个xml文档,如Xml 获取元素位置(),xml,xslt,position,Xml,Xslt,Position,假设您有一个xml文档,如 <parents> <parent> <element /> <element /> </parent> <parent> <element /> <element /> </parent> </parents> 在处理过程中,我需要知道元素是文档中
<parents>
<parent>
<element />
<element />
</parent>
<parent>
<element />
<element />
</parent>
</parents>
在处理过程中,我需要知道元素是文档中的1,2,3,4
,而不是调用position()
将返回1,2,1,2
。通常我会修改xml,但在本例中,这是不可能的,当我处理父2时,我需要知道它的第一个元素,实际上是元素3
谢谢,
-c使用
这一转变:
<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="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element">
<xsl:copy>
<xsl:number level="any" count="element"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时:
<parents>
<parent>
<element />
<element />
</parent>
<parent>
<element />
<element />
</parent>
</parents>
<parents>
<parent>
<element>1</element>
<element>2</element>
</parent>
<parent>
<element>3</element>
<element>4</element>
</parent>
</parents>
产生想要的结果:
<parents>
<parent>
<element />
<element />
</parent>
<parent>
<element />
<element />
</parent>
</parents>
<parents>
<parent>
<element>1</element>
<element>2</element>
</parent>
<parent>
<element>3</element>
<element>4</element>
</parent>
</parents>
1.
2.
3.
4.
使用
这一转变:
<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="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element">
<xsl:copy>
<xsl:number level="any" count="element"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时:
<parents>
<parent>
<element />
<element />
</parent>
<parent>
<element />
<element />
</parent>
</parents>
<parents>
<parent>
<element>1</element>
<element>2</element>
</parent>
<parent>
<element>3</element>
<element>4</element>
</parent>
</parents>
产生想要的结果:
<parents>
<parent>
<element />
<element />
</parent>
<parent>
<element />
<element />
</parent>
</parents>
<parents>
<parent>
<element>1</element>
<element>2</element>
</parent>
<parent>
<element>3</element>
<element>4</element>
</parent>
</parents>
1.
2.
3.
4.
明白了,其实很简单
<xsl:value-of select="count(preceding::element)"/>
明白了,其实很简单
<xsl:value-of select="count(preceding::element)"/>
问得好,+1。请参阅我的答案,以了解完整且真正的XSLT解决方案。:)好问题,+1。请参阅我的答案,以了解完整且真正的XSLT解决方案。:)如果一个
包含另一个
@Dimitre Novatchev,这将是不正确的,在我的情况下不会,但我在我的代码中使用了你的解决方案。+1另一种方法。对于嵌套的元素
可以使用:计数(previous::element |祖先::element)
。但是,请注意,对于复杂的层次结构限制(不是从整个树而是从某个祖先计算),表达式可能会变得非常复杂。因为这是xsl:number/@level和xsl:number//@from。如果一个
包含另一个
@Dimitre Novatchev,这将是不正确的。在我的情况下,它不会,但我在我的代码中使用了您的解决方案。+1另一种方法。对于嵌套的元素
可以使用:计数(previous::element |祖先::element)
。但是,请注意,对于复杂的层次结构限制(不是从整个树而是从某个祖先计算),表达式可能会变得非常复杂。这就是xsl:number/@level和xsl:number/@from。