通过计算绝对位置来提取节点值

时间:2013-06-24 05:49:04

标签: xslt xslt-1.0 xslt-2.0

我的源XML看起来:

  <test>
         <text1>Test</text1>
         <text2>Test</text2>
         <text2>Test</text2>
     <section>
         <text1>Test<bold>content</bold></text1>
         <text1>Test</text1>
         <text2>Test</text2>
         <text2>Test</text2>
     </section>
  </test>

想要根据元素的绝对数量(总计数)提取第6个节点的值。已使用<xsl:number level="any" from="/" count="*"/>确定元素的绝对数量。

2 个答案:

答案 0 :(得分:2)

XPath表达式/descendant::*[6]应该为您提供所需的元素。

<xsl:template match="/">
  <xsl:copy-of select="/descendant::*[6]" />
</xsl:template>

输出

<text1>Test<bold>content</bold></text1>

请注意,这是descendant:://之间差异的示例 - //*[6]会为您提供所有元素,这些元素是其各自父级的第六个子元素,而不仅仅是文档中的第六个元素,按深度优先顺序排列。

答案 1 :(得分:0)

这个xslt

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

        <xsl:variable name="allElements" select="//element()" />

        <xsl:template match="/">
            <output>
                <xsl:value-of select="$allElements[6]" />
            </output>
        </xsl:template>

    </xsl:stylesheet>

将导致

<?xml version="1.0" encoding="UTF-8"?>
<output>Testcontent</output>