我有一些类似的XML结构,我希望能够在XSLT中正确处理,因此用户可以在线查看。
第一个:
<TABLETYPE TYPEABBRV="MTHPRTSTS" TOTALINDICATOR="N">
<CATEGORY TYPE="DISABSTATUS" VALUE="WDIS" />
<STATUS>MET</STATUS>
</TABLETYPE>
下一个:
<TABLETYPE TYPEABBRV="ELEMIDADNIND">
<STATUS>METADDIND</STATUS>
</TABLETYPE>
我想做的是确保&#34;状态&#34;显示我不会通过检查&#34; CATEGORY&#34;的存在来获得两者的价值。如果&#34; CATEGORY&#34;存在,输出一个代码块。如果没有,则为另一个块。我知道我应该使用&#34; xsl:choose&#34;和&#34; xsl:何时&#34;但无法弄清楚如何测试&#34; CATEGORY&#34;存在。提前感谢您查看和回答。我应该补充一点,这两个XML块在不同的文件中。
在读完第一个答案后,我意识到我应该进一步澄清。目标是输出&#34; STATUS&#34;。
之间的内容我找到了一种方法,可以使用下面的答案重新排列和更改代码,以获得解决方案。谢谢!
答案 0 :(得分:1)
如何测试&#34; CATEGORY&#34;存在
test="CATEGORY"
如果CATEGORY
存在,将返回true。更准确地说 - 因为XSLT非常依赖于上下文 - 如果当前节点有一个名为&#34; CATEGORY&#34;的子元素,它将返回true。因此,如果您处于TABLETYPE
的上下文中,那么:
<xsl:choose>
<xsl:when test="CATEGORY">
<xsl:value-of select="CATEGORY/@TYPE"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="STATUS"/>
</xsl:otherwise>
</xsl:choose>
应该适合你。