如何检查元素在 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中包含一个或多个单词的所有段落。无法对它们进行分组,因为在这种情况下它们始终是唯一的。

您可以使用量化表达式来准确表达您想要的内容:

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

它返回存在字符串的所有段落,以便段落中不包含其任何部分。 ;)

相关内容

最新更新