XSLT解决方案重复模式

时间:2016-06-01 09:42:14

标签: xml xslt

我正在使用XSLT 1(由于原因超出范围而无法使用2)

我遇到了来自标签的相同重复输出。我的XML文档实际上有数百个不同的标签,但它们都有一个共同的特征:它们有一个名为uom的属性。当我生成输出时,我总是希望将属性连接到元素的值,例如

<a uom="km">10</a>
<b uom="m">5</a>
<c uom="l">2</c>

应该输出到

10 km
5 m
2 l

当然,在我的例子中,a,b,c在很大程度上被简化了,实际标签是来自ISO模式的长字。有没有办法防止以下情况:

<xsl:value-of select="a"><xsl:value-of select="a/@uom">
<xsl:value-of select="b"><xsl:value-of select="b/@uom">
<xsl:value-of select="c"><xsl:value-of select="c/@uom">

通过对下一个伪xslt:

的调整做一些事情
<xsl:procedure name="douom">
<xsl:value-of select="."><xsl:value-of select="@uom">
</xsl:procedure>

然后

<xsl:call-procedure name="douom" param="a"/>
<xsl:call-procedure name="douom" param="b"/>
<xsl:call-procedure name="douom" param="c"/>

我知道使用模板执行此操作的唯一方法是使用

match="a|b|c"

但实际上,如果我需要注册由|

分隔的每个元素,我的匹配字符串将长达数英里

1 个答案:

答案 0 :(得分:1)

这听起来像你想要的

<xsl:template match="*[@uom]">
  <xsl:value-of select="concat(., ' ', @uom)"/>
</xsl:template>

是否还需要<xsl:apply-templates select="//*[@uom]"/>取决于您要处理的其他元素或节点。