在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>
包含("<% 脚本 %>") - 抱歉,代码在这里不起作用。但它只会添加一个以逗号分隔的字符串。
使用三个谓词:
<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)]
检查<xsl:variable...>
表达式保存的当前text()
节点是否包含在list/node/text()
下的keyword.xml
文件中。
所以在这个测试用例中,输出是:
<?xml version="1.0"?>
a..
b..
c