Xslt 问题-比较xsl中的三个变量并输出这三个变量之间的差异?
我想使用xsl来比较在xsl中从txt目录列表创建的三个变量。我可以在bash中使用diff3来实现这一点,但我必须在xsl中实现这一点——这不是我的选择 例如: $variable1包含Xslt 问题-比较xsl中的三个变量并输出这三个变量之间的差异?,xslt,Xslt,我想使用xsl来比较在xsl中从txt目录列表创建的三个变量。我可以在bash中使用diff3来实现这一点,但我必须在xsl中实现这一点——这不是我的选择 例如: $variable1包含 狗 猫 斑马 $variable2包含 狗 猫 斑马 驴子 $variable3包含 狗 猫 斑马 马 我希望查询结果显示: $variable1是丢失的驴子,它出现在$variable2中,而马出现在$variable3中 $variable2是丢失的马,它出现在$variable3中 $variable2
狗
猫
斑马 $variable2包含
狗
猫
斑马
驴子 $variable3包含
狗
猫
斑马
马 我希望查询结果显示: $variable1是丢失的驴子,它出现在$variable2中,而马出现在$variable3中 $variable2是丢失的马,它出现在$variable3中 $variable2中缺少$variable3
有什么建议吗?显然,我是xsl新手。感谢您的耐心。这个XSLT 2.0样式表演示了如何找到其他两个变量中的单词,而不是正在测试的变量中的单词
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:variable name="variable1" select="'dog','cat','zebra'"/>
<xsl:variable name="variable2" select="'dog','cat','zebra','donkey'"/>
<xsl:variable name="variable3" select="'dog','cat','zebra','horse'"/>
<xsl:template match="/">
<xsl:text>Variable 1 was missing: </xsl:text>
<xsl:value-of select="($variable2, $variable3)[not(. = $variable1)]" separator=", "/>
<xsl:text> </xsl:text>
<xsl:text>Variable 2 was missing: </xsl:text>
<xsl:value-of select="($variable1, $variable3)[not(. = $variable2)]" separator=", "/>
<xsl:text> </xsl:text>
<xsl:text>Variable 3 was missing: </xsl:text>
<xsl:value-of select="($variable1, $variable2)[not(. = $variable3)]" separator=", "/>
</xsl:template>
</xsl:stylesheet>
您没有显示如何分配变量值。此样式表中的这些变量包含一系列字符串值。如果变量恰好是单个字符串,则可以使用
tokenize()
等函数来拆分字符串并返回要测试的单词序列。您使用的XSLT版本是什么(如果不知道,您在哪个处理器或环境中运行它)?这些变量值是带有空格和/或换行符的单个字符串,还是一系列文本值?你只是想报告那些不存在的单词,还是想把你提供的信息构建成结果?谢谢,这很有帮助!变量是从目录列表txts的标记化未解析文本读取中分配的-这导致了一个问题-在这种情况下,分隔符是什么?空格?可能是,但也可能有回车符和/或换行符。您可以使用\s+
对这些空白字符中的任何一个进行标记化标记化($var,“\s+”)
谢谢,Mads-这对我来说非常有效-为了回答我自己上面的问题(太晚了,无法编辑,也不知道如何删除注释),示例中的“分隔符”会影响结果输出,而不是输入-例如,如果您想在每次结果后换行,请输入“
”而不是“,”再次感谢,Mads-我们同时回答-re:tokenized,是的,我使用了\s+选项
Variable 1 was missing: donkey, horse
Variable 2 was missing: horse
Variable 3 was missing: donkey