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

ВЫВОД:

<ritem type="type_attachment_" relateditemnumber="8901037"/> 
<ritem type="type_attachment_" relateditemnumber="8901039"/> 
Смежные вопросы