2013-05-13 49 views
0

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

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

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

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

+0

请问你能澄清你在问什么吗? – 2013-05-13 12:33:21

+0

是的,这是可能的。你能发布一个xml样本吗? – AContractor 2013-05-13 12:33:31

+0

我澄清了我的问题。 – karex 2013-05-13 12:52:42

回答

4

表达式是truthy。不匹配任何节点的表达式是虚假的。因此,您不需要计算返回的节点组。只需测试以查看是否有任何匹配。

<xsl:if test="*[contains(@Type, 'type_attachment')]"> 
    something 
</xsl:if> 
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> 

OUTPUT:匹配现有的节点是

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