XSLT 不包含多个字符串



在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

相关内容

  • 没有找到相关文章

最新更新