在XSLT中,是否可以进行条件检查,如:
<xsl:if test='node != contains("Apple, Banana, Carrot")'>..</xsl>
因此,如果节点具有以下字符串,则不会在列表中查看。 动态创建的包含(..)字符串。
例如..
XML
<?xml version="1.0"?>
<list>
<node>Apple</node>
<node>Banana</node>
<node>Carrot</node>
<node>Dog</node>
<node>Elephant</node>
<node>Fox</node>
<node>Golf</node>
</list>
包含(“&lt;%script%&gt;”) - 抱歉,此处的代码不起作用。但它只会添加一个用逗号分隔的字符串。
答案 0 :(得分:2)
使用三个谓词:
<xsl:if test="contains(text(),'Apple')) or contains(text(),'Banana')) or contains(text(),'Carrot'))">..</xsl>
参考您更新的问题:
为关键字文件keyword.xml
命名:
<?xml version="1.0"?>
<list>
<node>Apple</node>
<node>Banana</node>
<node>Carrot</node>
<node>Dog</node>
<node>Elephant</node>
<node>Fox</node>
<node>Golf</node>
</list>
和任意数据测试文件data.xml
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<a>Apple</a>
<b>Carrot</b>
<c>Crap</c>
</Data>
您可以使用以下XSLT获取所需的节点:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="inc" select="document('keyword.xml')/list" />
<xsl:template match="/Data">
<xsl:apply-templates select="node()|@*" />
</xsl:template>
<xsl:template match="*">
<xsl:value-of select="name()" /> <!-- only for debugging/output purposes -->
<xsl:variable name="cur" select="text()" />
<xsl:if test="$inc/node/text()[contains(., $cur)]">..</xsl:if>
</xsl:template>
</xsl:stylesheet>
基本表达是
$inc/node/text()[contains(., $cur)]
检查text()
表达式保存的当前<xsl:variable...>
节点是否包含在keyword.xml
下的list/node/text()
文件中。
所以在这个测试用例中输出是:
<?xml version="1.0"?>
a..
b..
c