如何检查元素在XQuery中是否包含更多单独的单词?

时间:2017-04-10 11:23:41

标签: xml xquery

我有一个项目/单词列表:

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

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

对我来说,这看起来有点棘手,因为我需要迭代results个项目,并将所有项目与每个段落进行比较。

类似的东西:

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

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

1 个答案:

答案 0 :(得分: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

它返回所有带有字符串的段落,以便段落中包含 none 。 ;)