2013-05-13 41 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"/> 
相關問題