我的源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="*"/>
来识别。
XPath表达式/descendant::*[6]
应该为您提供所需的元素。
<xsl:template match="/">
<xsl:copy-of select="/descendant::*[6]" />
</xsl:template>
输出
<text1>Test<bold>content</bold></text1>
请注意,这是descendant::
和//
之间差异的一个示例。//*[6]
将为您提供作为其各自父元素的第六个子元素的所有元素,而不仅仅是文档中深度优先顺序的第六个元素。
此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>