Как получить количество элементов в XML с помощью marklogic - PullRequest
0 голосов
/ 14 сентября 2018

Я новичок в MarkLogic .. Мне нужно получить общее количество книг из следующего XML. Может ли кто-нибудь предложить мне.

<bk:bookstore xmlns:bk="http://www.bookstore.org">
<bk:book category='Computer'>
    <bk:author>Gambardella, Matthew</bk:author>
    <bk:title>XML Developer's Guide</bk:title>
    <bk:price>44.95</bk:price>
    <bk:publish_year>1995</bk:publish_year>
    <bk:description>An in-depth look at creating applications with XML. 
</bk:description>
</bk:book>
<bk:book category='Fantasy'>
    <bk:author>Ralls, Kim</bk:author>
    <bk:title>Midnight Rain</bk:title>
    <bk:price>5.95</bk:price>
    <bk:publish_year>2000</bk:publish_year>
    <bk:description>A former architect battles corporate zombies, an evil 
 sorceress, and her     own childhood to become queen of the world. 
</bk:description>
</bk:book>
<bk:book category='Comic'>
    <bk:author>Robert M. Overstreet</bk:author>
    <bk:title>The Overstreet Indian Arrowheads Identification </bk:title>
    <bk:price>2000</bk:price>
    <bk:publish_year>1991</bk:publish_year>
    <bk:description>A leading expert and dedicated collector, Robert M. 
    Overstreet has been writing The Official Overstreet Identification and 
 Price 
  Guide to Indian Arrowheads for more than 21 years</bk:description>
  </bk:book>
 <bk:book category='Comic'>
    <bk:author>Randall Fuller</bk:author>
    <bk:title>The Book That Changed America</bk:title>
    <bk:price>1000</bk:price>
    <bk:publish_year>2017</bk:publish_year>
    <bk:description>The New York Times Book Review Throughout its history 
   America has been torn in two by debates over ideals and beliefs. 
  </bk:description>
  </bk:book>
  </bk:bookstore>

Может кто-нибудь найти решение для этого вопроса, поскольку я новичок в этом.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Попробуйте это -

declare namespace bk="http://www.bookstore.org";

let $book_xml := 
<bk:bookstore xmlns:bk="http://www.bookstore.org">
  </bk:book>
   ........
   ........
  </bk:book>
</bk:bookstore>

return fn:count($book_xml//bk:book)

Надеюсь, что поможет!

0 голосов
/ 14 сентября 2018

Id предлагает использовать cts:count-aggregate в сочетании с cts:element-reference.Для этого требуется, чтобы у вас был индекс диапазона элементов на book.

cts:count-aggregate(cts:element-reference(fn:QName("http://www.bookstore.org", "book")))

Если производительность не слишком критична, а количество документов не слишком велико, вы также можете рассчитыватьс fn:count.

declare namespace bk="http://www.bookstore.org";
fn:count(//bk:book)
...