XSLT初学者查询

时间:2014-07-31 19:53:27

标签: xml xslt

我有一些类似的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;。

之间的内容

我找到了一种方法,可以使用下面的答案重新排列和更改代码,以获得解决方案。谢谢!

1 个答案:

答案 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>

应该适合你。