【发布时间】:2014-08-11 08:44:39
【问题描述】:
我想将一个输入 XML 映射到另一个 XML,只需将输入中的值写入输出中的不同标签。
举个简单的例子,如下:
<root1>
<a1>valA<a1>
<b1>valB<b2>
</root1>
需要成为:
<root2>
<a2>valA</a2>
<b2>valB</b2>
</root2>
目前我的 XSLT 中有以下内容:
<xsl:apply-templates match="root1" />
<xsl:template match="root1">
<a2>
<xsl:value-of select="a1" />
</a2>
<b2>
<xsl:value-of select="b1" />
</b2>
</xsl:template>
问题是我不想在我的输出中出现空标签。如果valA 和valB 为空,我会得到:
<root2>
<a2></a2>
<b2></b2>
<root2>
但我想省略空标签。我原以为xsl:output 可能有一个属性,但没有......我在 SO 上遇到了这个问题:XSLT: How to exclude empty elements from my result? - 但答案是间接的,它指定了一个 second样式表在第一次转换后去除空的输出元素。
我需要使用一个样式表来完成此操作。肯定有比做更简洁的事情:
<xsl:if test="string-length(a1) != 0">
<a2>
<xsl:value-of select="a1" />
</a2>
</xsl:if>
甚至:
<xsl:template match="a1[string-length(.) != 0]">
<a2>
<xsl:value-of select="." />
</a2>
</xsl:template>
对每个元素重复??
【问题讨论】: