Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 问题-比较xsl中的三个变量并输出这三个变量之间的差异?_Xslt - Fatal编程技术网

Xslt 问题-比较xsl中的三个变量并输出这三个变量之间的差异?

Xslt 问题-比较xsl中的三个变量并输出这三个变量之间的差异?,xslt,Xslt,我想使用xsl来比较在xsl中从txt目录列表创建的三个变量。我可以在bash中使用diff3来实现这一点,但我必须在xsl中实现这一点——这不是我的选择 例如: $variable1包含 狗 猫 斑马 $variable2包含 狗 猫 斑马 驴子 $variable3包含 狗 猫 斑马 马 我希望查询结果显示: $variable1是丢失的驴子,它出现在$variable2中,而马出现在$variable3中 $variable2是丢失的马,它出现在$variable3中 $variable2

我想使用xsl来比较在xsl中从txt目录列表创建的三个变量。我可以在bash中使用diff3来实现这一点,但我必须在xsl中实现这一点——这不是我的选择

例如:

$variable1包含


斑马

$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>&#10;</xsl:text>
        <xsl:text>Variable 2 was missing: </xsl:text>
        <xsl:value-of select="($variable1, $variable3)[not(. = $variable2)]" separator=", "/>
        <xsl:text>&#10;</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