2013-05-13 2 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

무엇을 묻고 싶습니까? –

+0

예 가능합니다. xml 샘플을 게시 할 수 있습니까? – AContractor

+0

나는 나의 질문을 약간 명확하게했다. – karex

답변

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