xpath - 如何获取子元素但没有子元素?

标签 xpath xquery marklogic

使用 MarkLogic 但这可能是一个通用的 XQuery 问题。

我有:

<library>
  <books>
    <book title="whatever">
      <publisher>Random</publisher>
      ....more children
    </book>
    <book title="another">
      <publisher>Simon</publisher>
      ....more children
    </book>
    ...
  </books>
</library>

我想返回所有 [book] 元素及其标题属性,但我不想要任何 book 的子元素,例如[出版商]。我如何以正统和高效的方式实现这一目标?

相关问题:有时我可能想要一些 child ,而不是其他 child ,例如获取所有 book 元素及其出版商子元素,但没有其他子元素。

谢谢。

最佳答案

XQuery(实际上是一个 XPath,它是 XQuery 的一个子集)/library/books/book从技术上讲,你可以做你想做的——它返回一组书元素,没有别的。一些 API 将返回对 book 元素的引用,并让您决定要对它们做什么,例如显示它们的标题。然而,许多工具和 API 会将这些书籍元素与以书籍为根的整个子树一起复制,并且在数据库的情况下,这通常是将通过网络从服务器传输到客户端的结果。在这种情况下,您不想选择现有的 book 元素,而是想构建一个包含 book 元素中信息子集的新文档。为此,您可以在 XQuery 中使用元素构造函数:

for $b in /library/books/book
return <book title="{$b/@title}"/>

关于xpath - 如何获取子元素但没有子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7853769/

相关文章:

sql - 修改 XML 节点值 - Oracle 12c 的 UpdateXML 等价物

logging - MarkLogic - XDMP-NEWSTAMP 异常

java - 无法在 Selenium 和 Java 中使用 className 定位元素

xpath - Xquery返回 map 列表而不是 map

xml - xPath-节点不存在时返回默认值?

sql-server - 从 XML FLWOR 查询返回计算的元素名称

xml - XQuery 是否有 FLWOR 表达式的退出语句

shell - 如何使用 scrapy response.xpath 提取 HTML 属性的值?

xquery - 如何在 MarkLogic 中重命名文档?

cookies - MarkLogic xdmp.http* 支持响应 header 中的多个 Set-Cookie