在xslt中我有一个变量,它有一个字符串,空格为分隔符。 var_1 ='猫狗牛'
存在以下xml,其中'name'属性具有以空格作为分隔符的值。
<top_element>
<element_10>
<element_11>
<element_000 name="cow cat">
string_1
</element_000>
</element_11>
</element_10>
<element_20 name="bat">
<element_21>
<element_000 name="cow cat">
string_2
</element_000>
</element_21>
</element_20>
<element_30 name="bat dog">
<element_31>
<element_000 name="cow cat">
string_3
</element_000>
</element_31>
</element_30>
<element_40 >
<element_41>
<element_000 name="cow bat">
string_4
</element_000>
</element_41>
</element_40>
</top_element>
问题:
只有在元素的祖先或自我的情况下处理xml中的element_000:
未定义名称属性或
'name'属性的值至少包含一个值'var_1。
在使用xslt解析xml时,输出html应仅包含以下字符串: STRING_1 STRING_3 STRING_4
不应显示string_2,因为其祖先的名称值与var_1列表中的任何值都不匹配。
我的尝试: 注意:我使用的是xslt版本2.0
<xsl:template match="element_000">
<choose>
<xsl:when test"(ancestor-or-self::*[(tokenize(@name,'\s+')) != (tokenize($var_1,'\s+'))])">
&lt; - 处理元素 - &gt;
</xsl:when>
</xsl:choose>
</xsl:template>
这种方法对我不起作用。如果可以通过其他方式告诉我,请告诉我。
由于 SRB。
答案 0 :(得分:1)
如果您使用
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="var_1" select="'cat dog cow'"/>
<xsl:variable name="names" select="tokenize($var_1, ' ')"/>
<xsl:template match="text()"/>
<xsl:template match="element_000[every $el in ancestor-or-self::*
satisfies (not(exists($el/@name)) or $names = tokenize($el/@name, ' '))]">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
然后输出只包含元素
<element_000 name="cow cat">
string_1
</element_000><element_000 name="cow cat">
string_3
</element_000><element_000 name="cow bat">
string_4
</element_000>