Xquery 如何为具有特殊属性值的元素获取cts:value

Xquery 如何为具有特殊属性值的元素获取cts:value,xquery,marklogic,Xquery,Marklogic,我有一份文件 <document> <category selected="true">a</category> <category>b</category> <category selected="true">c</category> </document> 但我明白,在这种情况下,我将获得所有类别。您的cts:element-attribute-va

我有一份文件

    <document>
     <category selected="true">a</category>
     <category>b</category>
     <category selected="true">c</category>
    </document>

但我明白,在这种情况下,我将获得所有类别。

您的
cts:element-attribute-value-query()
将所有具有
类别
元素的文档与
选定的
属性
true
进行匹配。然后,您的
cts:element-values()
返回每个文档中所有
类别
元素的不同值,而不管该类别是否具有
@selected='true'
属性

您可能希望从许多(可能是数亿)结构类似的文档中获取值,而不仅仅是这个文档。对于一个文档,XPath就可以了。但是,在整个数据库中,您需要一个范围索引来有效地执行此操作。范围索引,顾名思义,保留了一组有序的值和对在内存中找到它们的文档的引用。这使得跨值范围获取不同的值或计算非常有效


使用范围索引,您可以直接从索引中获取值,而无需读取文档本身。鉴于您的文档结构,您将需要一个用于区分选定类别和未选定类别的列表。因此,您需要在
category[@selected='true']
上创建一个路径范围索引,然后调用
cts:values(cts:path reference(“category[@selected='true']))
cts:values()
还可以将
cts:query
作为其第四个参数,以限制匹配值的文档域。

谢谢!我不知道我可以在路径范围索引中使用按属性选择。
    cts:element-values(xs:QName("category"), (), (), cts:element-attribute-value-query(xs:QName("category"), xs:QName("selected"), "true"))