如果标签存在于XSL中,那么仅输出标签的最佳方法是什么?

时间:2010-04-07 20:32:11

标签: xml xslt

我正在开发一个第三方应用程序的界面,它基本上需要使用应用程序吐出的XML并将其转换为我们的系统可以处理的XML。它基本上只是将样式表应用于原始XML,使其看起来像“我们的”XML。我注意到在我们拥有的其他样式表中,有这样的结构:

<xsl:for-each select="State">
    <StateAbbreviation>
        <xsl:value-of select="."/>
    </StateAbbreviation>
</xsl:for-each>

基本上,“in”XML有一个State标记,我需要输出它作为我们公认的StateAbbreviation标记。但是,如果“in”XML包含State标记,我想只输出StateAbbreviation标记。上面的块完成了这个很好,但是不是很直观(至少不是我),因为每当我看到for-each我认为有多个,而在这些情况下有0或者1。

我的问题:这是一个标准的构造吗?如果没有,是否有更优选的方法呢?我显然可以检查字符串长度(这也是在其他样式表中完成的),但是想在所有地方做到相同的“最佳”方式(假设当然存在“最佳”方式。建议?建议?

2 个答案:

答案 0 :(得分:4)

您可以将for-each替换为:

<xsl:if test="State">

答案 1 :(得分:1)

建议在XSLT中使用xsl:apply-templates优于xsl:for-each

在这种情况下简单

<xsl:apply-templates select="State"/>

以最优雅的方式解决问题。 无需条件,XSLT处理器完成所有工作,以应用最适合每个State孩子的模板。