xquery - 在 MarkLogic 中搜索 XML 文档以获取处理指令

标签 xquery marklogic processing-instruction

我有以下代码:

cts:and-query((
cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"),
cts:element-query(xs:QName("beginpage"),
cts:and-query(()))
))

但想添加一个 cts:or-query 来查找高亮的“docpage”,但不知道要使用什么。我尝试了 cts:element-query 但我认为它不是一个元素。看起来像是一个标记什么的。有什么建议吗?

enter image description here

最佳答案

目前还没有办法在processing-instruction()上创建索引。 (使用路径范围索引或其他方式)。

如果您已经在利用 envelope pattern ,你可以实现 processing-instruction()作为信封中的一个元素,即 <docpage num="i"/>然后使用 cts:element-attribute-value-query()

cts:and-query((
  cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"),
  cts:or-query((
    cts:element-query(xs:QName("beginpage"),
    cts:element-attribute-value-query(xs:QName("docpage"), xs:QName("num"), "i")
  ))
))

或者您可以创建一个文档属性,然后使用 cts:properties-fragment-query()

cts:and-query((
  cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive"),
  cts:or-query((
    cts:element-query(xs:QName("beginpage"),
    cts:document-fragment-query(
      cts:element-attribute-value-query(xs:QName("docpage"), xs:QName("num"), "i")
    )
  ))
))

否则,您需要通过 XPath 对搜索结果执行过滤。

cts:search(doc(),
  cts:element-word-query(xs:QName("primaryie"), $textname, "case-insensitive")
)[book/(beginpage or processing-instruction("docpage") = 'num="i"')]

这需要过滤(读取匹配的文档),因此此查询的响应速度将取决于从搜索条件返回的文档数量,以及您对返回的文档数量设置的限制。

关于xquery - 在 MarkLogic 中搜索 XML 文档以获取处理指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52115196/

相关文章:

由 "&amp;"实体引用引起的XQuery无效实体引用错误

xslt - 转换 XML 时如何从处理指令中提取信息?

javascript - 处理 <?xml-stylesheet> 类似于 <link rel ="stylesheet">?

xquery - 如何将 xml 中的项目转换为 xdmp :function?

xslt - xsl 文本转换中的空格

xquery - 使用Basex在XML中插入数据

gradle - 如何使用Gradle配置MarkLogic数据库备份?

xml - XQuery(或 XPath)是否具有 Update、Insert 和 Delete 以及 Select 的等价物?

xquery - 使用 mem :insert-child() is inconsistent 进行内存更新后的节点排序

c# - 从处理指令行读取 XML 属性