我有一个项目/单词列表:
<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
中的一个或多个单词的所有段落。无法对它们进行分组,因为它们在这种情况下始终是唯一的。
答案 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 。 ;)