Есть ли в xquery средство чтения XMLStream?

#xquery #marklogic

#xquery #marklogic

Вопрос:

Я хочу последовательно прочитать XML в xquery (MarkLogic DB), чтобы определить начальный и конечный теги. Доступно ли в xquery средство чтения stream, подобное Java XMLStreamReader ?

Комментарии:

1. Нет, это не так: XQuery работает с древовидной моделью данных, созданной анализатором XML, а не с необработанным лексическим источником XML. Но если вы объясните, чего вы на самом деле пытаетесь достичь, то я уверен, что мы сможем помочь вам найти способ.

2. Моя цель — найти все начальные и конечные элементы. Когда я сталкиваюсь с начальным элементом, мне нужно выполнить некоторую логику, аналогично для конечного элемента.

3. Если вы имеете в виду теги start и end, то это не стартер. XQuery не видит теги, он видит узлы.

Ответ №1:

Добро пожаловать, Эш,

В XQuery нет функции, аналогичной Java XMLStreamReader. Функция DOC () в XQuery считывает xml-документ, но не считывает последовательно автоматически, для этого вам нужно использовать приведенный ниже запрос:

     let $result :=
       for $x in fn:doc()
        let $first-element :=name($x/*/*[1])
        let $last-element  :=name($x/*/*[last()])
           return fn:concat("First Element: ", "'", $first-element, "'", " Second element: ", "'", $last-element, "'")
    return $result