0

我正在尝试在 Marklogic 中搜索具有<document>不止一次元素的文档 XML。以下是我要检索的一个此类文档 XML 的结构:

<root>
    <documents>
        <document>
            <id>1</id>
            <name>roy</name>
            <otherData></otherData>
        </document>
        <document>
            <id>2</id>
            <name>roy</name>
            <otherData></otherData>
        </document>
        ....
        ...
        ..
        .
        <document>
            <id>3</id>
            <name>roy</name>
            <otherData></otherData>
        </document>

    </documents>
</root>

我不想检索具有以下结构的 XML:

<root>
    <documents>
        <document>
            <id>3</id>
            <name>roy</name>
            <otherData></otherData>
        </document>
    </documents>
</root>

element-query我可以使用with搜索存在或最少一个xs:QName("document"),但不确定如何使用多个搜索。

任何帮助将非常感激。

4

2 回答 2

2

没有真正简单的方法可以在 MarkLogic 中很好地扩展。最简单的方法是丰富文档,为<documents>元素添加计数属性,并在每次触摸文档时保持最新。然后你可以对 count 属性做一个直接的范围索引,直接得到你想要的。

于 2017-11-13T18:49:51.443 回答
1

我喜欢接受的答案,但尝试使用 cts:search 和 XPATH 做不同的事情。它比只使用 XPATH 更快:

xquery version "1.0-ml";
let $query1:= cts:element-query(xs:QName("document"),cts:and-query( () )),
$query2:= cts:element-query(xs:QName("documents"),$query1)
return 
for $doc in cts:search(collection(),$query2,("unfiltered")) where count($doc/root/documents/document) > 1  return  $doc
于 2017-12-14T00:18:57.950 回答