2017-04-10 67 views
2

我有项目/单词的列表:如何检查一个元素在XQuery中是否包含更多单独的单词?

<results> 
    <string> 
    <part>Downs</part> 
    <part>1957</part> 
    </string> 
    <string> 
    <part>Carmines</part> 
    <part>Huckfeldt</part> 
    <part>1996</part> 
    </string> 
</results> 

在文档中,我需要寻找包含特定string的所有parts一次段落。

对我来说,这似乎有点棘手,因为我需要遍历results项目,并将它们全部与每个段落进行比较。

喜欢的东西:

for $part in $results//part 
let $paragraph := $doc//p[contains(., $part)] 
return 
    $paragraph 

这将返回一个包含从每一个string一个或多个单词的所有段落。无法对它们进行分组,因为它们在这种情况下始终是唯一的。

回答

3

您可以使用quantified expressions来表达你想要什么:

for $p in $doc//p 
where 
    some $string in $results//string 
    satisfies (
    every $part in $string/part 
    satisfies contains($p, $part) 
) 
return $p 

这里有一个较短的版本:

for $p in $doc//p 
where $results//string[every $part in ./part satisfies contains($p, $part)] 
return $p 

最后一个简短而神秘的版本,没有量化的表述:

for $p in $doc//p 
where $results//string[not(part[not(contains($p, .))])] 
return $p 

它返回所有有字符串的段落,所以其中的零件是而不是包含在该段落中。 ;)

+0

非常感谢!你做了我的一天:)是的,我对最后的解决方案并不感到惊讶。它通常由数学家来完成! –

相关问题