我有以下结构的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年
我怎么能这样做?有人可以帮我解决这个问题......
答案 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>