我在xslt中有两个变量,例如名为var1和var2。
Var1 = A,B,C,D,F G,H Var2 = L,M,F,C,D,K
我想检查一下Var1中是否存在任何字母并出现在Var2中,请在Var1之后添加此字母。 意味着我最终想要存储在var1
中的值A,B,C,d,F,G,H,L,M,K
我在想下面的东西不起作用 -
<xsl:variable name="Var1">
<xsl:if test="not(contains($va1,'L'))">
<xsl:value-of select="concat($va1, 'L')"/>
</xsl:if>
<xsl:if test="not(contains($va1,'M'))">
<xsl:value-of select="concat($va1, 'M')"/>
</xsl:if>
</xsl:variable>
注意 - 我是XSLT的初学者,上面的代码只是我头脑中的东西而没有尝试过,所以请不要投票。
答案 0 :(得分:0)
可能在某种程度上,,
不保留$var2
:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="var1">
<xsl:text>A,B,C,D,F,G,H</xsl:text>
</xsl:variable>
<xsl:variable name="var2">
<xsl:text>L,M,F,C,D,K</xsl:text>
</xsl:variable>
<xsl:variable name="merged" select="concat(concat($var1, ','), translate($var2, $var1, ''))"/>
<xsl:template match="@* | node()">
<xsl:apply-templates select="/"/>
</xsl:template>
<xsl:template match="/">
<xsl:value-of select="$merged"/>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
A,B,C,D,F,G,H,LMK
请注意,对于XSLT 1.0,它只能用于示例中的单个字符(translate
不能替换子字符串!)。
如果您不需要变量中的合并字符,则可以执行以下操作:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="sep" select="','"/>
<xsl:variable name="var1">
<xsl:text>A,B,C,D,F,G,H</xsl:text>
</xsl:variable>
<xsl:variable name="var2">
<xsl:text>L,M,F,C,D,K</xsl:text>
</xsl:variable>
<xsl:template match="@* | node()">
<xsl:apply-templates select="/"/>
</xsl:template>
<xsl:template match="/">
<xsl:value-of select="$var1"/>
<xsl:value-of select="$sep"/>
<xsl:call-template name="not-contained">
<xsl:with-param name="string1" select="$var1"/>
<xsl:with-param name="string2" select="$var2"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="not-contained">
<xsl:param name="string1"></xsl:param>
<xsl:param name="string2"></xsl:param>
<xsl:param name="sep" select="$sep"/>
<xsl:param name="match"/>
<xsl:value-of select="$match"/>
<xsl:choose>
<xsl:when test="contains($string2, $sep)">
<xsl:variable name="before" select="substring-before($string2, $sep)"/>
<xsl:variable name="no-match" select="not(contains($string1, $before))"/>
<xsl:if test="$no-match">
<xsl:value-of select="$before"/>
</xsl:if>
<xsl:call-template name="not-contained">
<xsl:with-param name="string1" select="$string1"/>
<xsl:with-param name="string2" select="substring-after($string2, $sep)"/>
<xsl:with-param name="match">
<xsl:if test="$no-match">
<xsl:value-of select="$sep"/>
</xsl:if>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="not(contains($string1, $string2))">
<xsl:value-of select="$string2"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
A,B,C,D,F,G,H,L,M,K
如果每个字母都是源文档中的文本节点,则可以使用<xsl:key>
将它们组合在一起,从而消除重复。