Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MarkLogic:XQuery从XML文档中获取值?_Xml_Xsd_Xquery_Marklogic_Xquery Sql - Fatal编程技术网

MarkLogic:XQuery从XML文档中获取值?

MarkLogic:XQuery从XML文档中获取值?,xml,xsd,xquery,marklogic,xquery-sql,Xml,Xsd,Xquery,Marklogic,Xquery Sql,我在MarkLogic数据库中加载了以下XML文档: <x:books xmlns:x="urn:books"> <book id="bk001"> <author>Writer</author> <title>The First Book</title> <genre>Fiction</genre> <price>44.95</price>

我在MarkLogic数据库中加载了以下XML文档:

<x:books xmlns:x="urn:books">
  <book id="bk001">
    <author>Writer</author>
    <title>The First Book</title>
    <genre>Fiction</genre>
    <price>44.95</price>
    <pub_date>2000-10-01</pub_date>
    <review>An amazing story of nothing.</review>
  </book>
  <book id="bk002">
    <author>Poet</author>
    <title>The Poet's First Poem</title>
    <genre>Poem</genre>
    <price>24.95</price>
    <review>Least poetic poems.</review>
  </book>
</x:books>
注意:不需要管道分隔,但需要一些集合列表


有人能分享一些链接或者帮我写这个XQuery吗?我不熟悉这一点。

XQuery的序列结构将包含多个值,但它不是层次结构的-因此,如果创建序列序列,它将简单地将它们全部连接到一个大序列中

这将把所有子元素和属性值捕获到一个序列中,但是由于我刚才提到的序列的属性,没有内置的方法来获取第二本书的第一个值。你必须知道这是第七项。第三本书的第一个价值是第14项,依此类推:

$books/book/(*|@*)/string()
仅演示如何实现管道分隔列表:

string-join($books/book[1]/(*|@*)/node-name() ! string(), ' | '), (: Create header row :)
for $book in $books/book
return string-join($book/(*|@*)/string(), ' | ')

@wst:非常感谢。出于某种原因,我无法在marklogic中运行相同的程序。可能它适用于通用XMLXQuery。但我找到了以下解决方案

for $x at $i in doc("bookstore.xml")/bookstore/book
return data($x)

请找到我的答案。但是我得到了一行的值,不知道我能不能把它连接起来。我无法理解字符串连接是如何工作的。你能帮我修改代码来解决这个问题吗?你的问题没有说明你是如何选择那个XML示例的,所以我只是用
$books
作为占位符。您需要更新它以反映它在数据库中的存储方式。从您的评论中,我也不清楚join是什么意思。@wst的答案在MarkLogic中有效,前提是$books设置正确。具体来说,它应该类似于
declare变量$books:=fn:doc(“bookstore.xml”)/bookstore
注意,不同的项目(书籍)通常应该在不同的文档中。如果您有一个带有books根目录的文档,并且其下有很多book元素,那么搜索和索引功能将无法正常工作。这将是一本有用的书。
for $x at $i in doc("bookstore.xml")/bookstore/book
return data($x)