XSL转换:需要xml中的所有节点

时间:2014-08-14 04:40:06

标签: xml xslt-1.0

我有以下结构的XML程序

<cd>
    <year>1985</year>
</cd>
<cd>
    <year>1987</year>
</cd>

和xsl程序

<xsl:template match="/">
   <xsl:apply-templates/>
</xsl:template>
<xsl:template match="cd">

      <xsl:element name="Year">
         <xsl:value-of select="year">
      </xsl:element>

</xsl:template>

我的输出是1985年

但我需要输出为 1985年1987年

我怎么能这样做?有人可以帮我解决这个问题......

2 个答案:

答案 0 :(得分:1)

如果您的XML格式正确并且真的如图所示那么简单,那么您可以这样做......

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="/*">
        <xsl:value-of select="normalize-space()"/>
    </xsl:template>

</xsl:stylesheet>

如果您的输入XML全部在一条线上,它将无法工作;它将显示为19851987,没有空格。你可以做这样的事情......

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:output method="text"/>

    <xsl:template match="text()">
        <xsl:if test="preceding::text()">
            <xsl:text> </xsl:text>
        </xsl:if>
        <xsl:value-of select="."/>
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:0)

如果您想要像“1985 1987”中提到的输出,请尝试一下;

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8"/>
    <xsl:template match="/">
        <xsl:for-each select="//cd">
                <xsl:value-of select="year"/>
                <xsl:text> </xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

根据您的方法,您可以选择标签,但这会为您提供一个输出,其间有空行;

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" version="1.0" encoding="UTF-8"/>
<xsl:template match="/">
            <xsl:apply-templates select="//cd">
               <xsl:sort select="year"/>
            </xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>