0

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

这是检查它的正确方法吗?

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

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

4

2 回答 2

4

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

因此,您不需要计算返回的节点集。只需测试以查看是否有任何匹配项。

<xsl:if test="*[contains(@Type, 'type_attachment')]">
   something
</xsl:if>
于 2013-05-13T12:39:52.347 回答
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"/>
于 2013-05-13T12:39:50.203 回答