XSLT:如何将多个子节点选择到单个列表中



如何将子节点提取到单个列表中以便在模板中进行处理?

考虑以下XML:

<document>
  <menu></menu>
  <feature>
    <header>Header 1</header>
    <article>article 1</article>
    <article>article 2</article>
  </feature>
  <feature>
    <header>Heading 2</header>
    <article>article 1a</article>
    <article>article 2a</article>
  </feature>  
</document> 

我想将所有的article节点提取到一个单独的列表中,以便在模板中处理。

我需要article节点立即可用,因为我需要根据文章的数量进行计算。

您可以尝试下面的样式表:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ext="http://exslt.org/common"
    exclude-result-prefixes="ext">
    <xsl:output indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <xsl:variable name="list">
            <articles>
                <xsl:copy-of select="descendant::article"/>
            </articles>
        </xsl:variable>
        <xsl:variable name="vPass1" select="ext:node-set($list)"/>
        <xsl:apply-templates select="$vPass1/*"/>
    </xsl:template>
    <xsl:template match="articles">
        <xsl:copy>
            <xsl:text>Number of articles: </xsl:text><xsl:value-of select="count(article)"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
当应用

输入时,它产生:

<articles>Number of articles: 4</articles>

相关内容

  • 没有找到相关文章

最新更新