检查节点是否存在的XSL条件

时间:2013-05-13 12:31:22

标签: xslt types contain

我想检查在我的XML中是否存在具有包含字符串type_attachment_的type属性的节点。

检查它是否正确?

<xsl:if test="count(*[contains(@Type, 'type_attachment_')]) &gt; 0">
   something
</xsl:if>

我不知道这个节点是如何嵌套的。例如,它可以简单:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"?>

<hello-world>
 <greeter>
  <dsdsds>An XSLT Programmer
   <greeting type = 'type_attachment_'>Hello, World!
   </greeting>
  </dsdsds>
 </greeter>
</hello-world>

但也可以包含嵌套在不同其他元素中的此节点。

2 个答案:

答案 0 :(得分:4)

与现有节点匹配的表达式是真实的。与任何节点不匹配的表达式都是假的。

因此,您无需计算返回的节点集。只需测试一下是否匹配。

<xsl:if test="*[contains(@Type, 'type_attachment')]">
   something
</xsl:if>

答案 1 :(得分:1)

找出一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:param name="filt">
    <filters>
      <ritem type="type_attachment_" relateditemnumber="8901037"/>
      <ritem relateditemnumber="8901038"/>
      <ritem type="type_attachment_" relateditemnumber="8901039"/>
      <ritem relateditemnumber="8901040"/>
    </filters>
  </xsl:param>

  <xsl:template match="/">
    <xsl:for-each select="$filt/filters/ritem[@type='type_attachment_']">
      <xsl:copy-of select="."/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

输出:

<ritem type="type_attachment_" relateditemnumber="8901037"/>
<ritem type="type_attachment_" relateditemnumber="8901039"/>