xslt用于验证节点的元素属性与否

时间:2017-09-04 09:49:56

标签: xml xslt

我有一个XML,我需要从所有节点中选择特定元素。实际XML的结构如下所示 -

<host> 
<node> 
  <type>fruit1</type>
  <value>10</value>
</node>
<node>
  <type>fruit2</type>
  <value>20</value>
</node>
<node>
  <type>fruit3</type>
  <value xsi:type="valueList">
      <listValues>
        <value>
            <value>30</value>
            <code>abc</code>
        </value>
      </listValues>
  </value>
</node>
<node>
  <type>fruit4</type>
  <value>40</value>
</node>  
<node>
  <type>fruit5</type>
  <value>50</value>
</node>
</host>

我必须以表格格式从所有节点中选择元素<type><value>。第3个节点具有元素<value>的列表值,对于此元素,该值应为&#39; true&#39;。预期的输出XML如下 -

<html>
<body>
<table border="1"> 
<tr>
  <td>fruit1</td>
  <td>10</td>
</tr>
<tr>
  <td>fruit2</td>
  <td>20</td>
</tr>
<tr>
  <td>fruit3</td>
  <td>true</td>
</tr>
<tr>
  <td>fruit4</td>
  <td>40</td>
</tr>
<tr>
  <td>fruit5</td>
  <td>50</td>
</tr>
</table>  
</body>  
</html>

编写的XSLT如下 -

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="1">
  <xsl:for-each select="host/node">
    <tr>
      <td><xsl:value-of select="type" /></td>
      <xsl:choose>
        <xsl:when test = "//node/value/listValues/value/value != null">
            <td>true</td>
        </xsl:when>
        <xsl:otherwise>
            <td><xsl:value-of select="value" /></td>
        </xsl:otherwise>
      </xsl:choose>
    </tr>
  </xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

但我无法获得所需的XML输出格式。任何帮助都是一个很好的补充。

1 个答案:

答案 0 :(得分:1)

更改

<xsl:when test = "//node/value/listValues/value/value != null">

<xsl:when test = "value/listValues/value/value != ''">