使用 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/