Xml 什么';如果标签存在于XSL中,那么最好的方法是什么?
我正在开发一个与第三方应用程序的接口,它基本上需要将应用程序吐出的XML转换成我们的系统可以处理的XML。它基本上只是对原始XML应用样式表,使其看起来像“我们的”XML。我注意到,在我们的其他样式表中,有如下结构:Xml 什么';如果标签存在于XSL中,那么最好的方法是什么?,xml,xslt,Xml,Xslt,我正在开发一个与第三方应用程序的接口,它基本上需要将应用程序吐出的XML转换成我们的系统可以处理的XML。它基本上只是对原始XML应用样式表,使其看起来像“我们的”XML。我注意到,在我们的其他样式表中,有如下结构: <xsl:for-each select="State"> <StateAbbreviation> <xsl:value-of select="."/> </StateAbbreviation> <
<xsl:for-each select="State">
<StateAbbreviation>
<xsl:value-of select="."/>
</StateAbbreviation>
</xsl:for-each>
基本上,“in”XML有一个State标记,我需要将其输出为可识别的State缩写标记。但是,我只想在“in”XML包含State标记的情况下输出State缩写标记。上面的块很好地完成了这一点,但不是很直观(至少对我来说不是这样),因为每次我看到每个都有一个,我假设有多个,而在这些情况下有0或1
我的问题:这是一个标准的ish结构吗?如果没有,是否有更可取的方法?显然,我可以检查字符串长度(其他样式表也在检查),但我希望在任何地方都使用相同的“最佳”方法(当然,假设存在“最佳”方法。建议?建议?您可以将for each替换为:
<xsl:if test="State">
在XSLT中,建议使用xsl:apply-templates
而不是xsl:for-each
在这种情况下,一个简单的
<xsl:apply-templates select="State"/>
以一种最优雅的方式解决了这个问题。不需要任何条件,XSLT处理器做了所有工作来应用与每个状态
子级最匹配的模板。我突然想到,您可能还需要将更改为:。哇,这是一个非常明显的答案,我不知道为什么a)最初的开发人员没有这样做,为什么b)我无法自己解决这个问题。我想我今天已经有力地展示了我的XSL新手身份。谢谢你的帮助!谢谢你的回答也帮了我。