Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Xml Xquery,使用deep equal和额外元素_Xml_Function_Xquery - Fatal编程技术网

Xml Xquery,使用deep equal和额外元素

Xml Xquery,使用deep equal和额外元素,xml,function,xquery,Xml,Function,Xquery,我使用此函数检查一个序列是否存在于另一个序列中: fn:deep-equal() 问题是,当它比较两个序列时,如果一个序列拥有其他序列的所有元素加上她自己的元素,则返回false 我想知道如果函数属性之一定义了“至少最小序列”,它如何返回true 欢呼不,对结构同构和价值认同的深度平等检查。您有两个选择: 1编写您自己的递归函数contains_subseq($a,$b),以确定$a是否包含$b作为子序列(您可以对两个序列的成员使用deep equal,具体取决于您实际查找的内容) 如果要求不

我使用此函数检查一个序列是否存在于另一个序列中:

fn:deep-equal()

问题是,当它比较两个序列时,如果一个序列拥有其他序列的所有元素加上她自己的元素,则返回false

我想知道如果函数属性之一定义了“至少最小序列”,它如何返回true


欢呼

不,对结构同构和价值认同的深度平等检查。您有两个选择:

1编写您自己的递归函数contains_subseq($a,$b),以确定$a是否包含$b作为子序列(您可以对两个序列的成员使用deep equal,具体取决于您实际查找的内容)

如果要求不仅仅是$a中的所有项以相同的顺序显示为$b中的项,而且它们是连续的并从位置1开始(即,如果要求序列$a显示为序列$b的前缀),那么Michael Kay提出的解决方案将起作用,您不需要自己的函数。如果
(1,3,5)
(1,2,3,4,5)
应该匹配,或者如果
(2,3,4)
(1,2,3,4,5)
应该匹配,那么您需要的不仅仅是这些

2如果您事先知道所需的最小序列是什么,您可以编写一个函数,通过丢弃所有其他内容来规范化序列,然后使用deep equals测试规范化序列是否与最小序列匹配

试试看:

let $len := min((count($a), count($b)))
return deep-equal(subsequence($a, 1, $len), subsequence($b, 1, $len)) 
这是假设长度差异仅适用于顶层序列,而不适用于树下较深的子序列