我有一个项目/单词列表:
<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
它返回存在字符串的所有段落,以便段落中不包含其任何部分。 ;)