在xPath中,如果有一个序列1 =序列2,如果序列1中至少有一个元素也在序列2中,则返回真。我需要一些东西,它允许我测试sequence1中是否存在sequence1的所有元素(sequence1的值集合是sequence2中的一组值的子集)。XPath中的子集
这可行吗?
在xPath中,如果有一个序列1 =序列2,如果序列1中至少有一个元素也在序列2中,则返回真。我需要一些东西,它允许我测试sequence1中是否存在sequence1的所有元素(sequence1的值集合是sequence2中的一组值的子集)。XPath中的子集
这可行吗?
not($seq1[not(. = $seq2)])
另类伊利,和更有效地 - 节点和节点的基于身份的平等语义序列:(VS○○(N)(N^2)):
count($seq1 | $seq2) = count($seq2)
II。的XPath 2.0
对于节点的序列(节点的身份 - 基于平等语义):
not($seq1 except $seq2)
和值的序列的有效表达:
count(distinct-values(($seq1, $seq2))) eq count(distinct-values($seq2))
谢谢!这工作。 – Daniel 2013-03-15 18:45:21
你可以使用检查一次,如果每个元素都在序列2
every $x in $sequence1 satisfies $x = $sequence2
确实,但效率低下。 – 2013-03-09 16:26:40
@DimitreNovatchev:好吧,查询优化器的工作将它变成最高效的版本。 – BeniBela 2013-03-09 17:17:10
BeniBela:你真的相信优化器可以用O(N)替换这个O(N^2)表达式吗? :) – 2013-03-09 19:17:37
这应该XPath 1.0中工作:
not($sequence1[not(. = $sequence2)])
它将做一个具体的例子很好。你在问关于*节点的序列吗?或者是关于任何序列的问题? “平等”是如何定义的?它是否具有基于身份的语义,还是具有基于价值的语义? – 2013-03-09 16:14:07
此外,关于“子集”的说法更为精确。子序列意味着相同的顺序,这*不是*你所要求的。 – 2013-03-09 16:29:20