簡體   English   中英

MarkLogic:XQuery從XML文檔中獲取值?

[英]MarkLogic: XQuery to Get Values from XML Documents?

我在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的新手。 當我從SQL數據庫中檢索它時,如何從XML文檔中檢索這些值?

輸出:

BookID | Author | Title | Genre | price | pub_date | review
bk001 | Writer | The First Book | Fiction | 44.95 | 2000-10-01
bk002 | Poet | The Poet's First Poem | Poem | 24.95 | Least poetic poems.

注意:不需要管道分隔但有些集合列表。

有人可以分享一些鏈接或幫我寫這個XQuery嗎? 我是新來的。

XQuery的序列構造將包含多個值,但它不是分層的 - 所以如果你創建一個序列序列,它將簡單地將它們連接成一個大序列。

這會將所有子元素和屬性值捕獲到一個序列中,但由於我剛才提到的序列的屬性,沒有內置的方法來獲取第二本書的第一個值。 你必須知道這是第7項。 並且第三本書的第一個值將是第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中運行相同的內容。 可能適用於通用XML Xquery。 但我找到了以下解決方案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM