Получение содержимого тега в XQuery 3.0 (exist-db)

Я использую следующий код XQuery для выбора всех документов .html в коллекции exist-db. Сценарий должен создать XML-документ (сериализованный как JSON) с URI документа и заголовком (который сохраняется как первый элемент H1). Однако элемент остается пустым. Почему?

xquery version "3.0";
declare option exist:serialize "method=json media-type=text/javascript";

<result> {
    let $data-collection := '/db/output'
    for $doc in collection($data-collection)
    where contains(base-uri($doc), '.html')
    return 
        <item>
            <url>{base-uri($doc)}</url>
            <title>{$doc/h1/text()}</title>
        </item>
}
</result>

person Andreas Jung    schedule 30.06.2014    source источник


Ответы (1)


Я упростил вам поиск HTML-документов, но я думаю, что ваш элемент h1 не является корнем документа, вместо этого я предположил, что он может быть где угодно в документе, поэтому использовал ось descendant-or-self, например. //, и поскольку ваш HTML-код может находиться в пространстве имен, я использовал префикс *: для обозначения любого пространства имен.

xquery version "3.0";

declare option exist:serialize "method=json media-type=text/javascript";

<result> {
    let $data-collection := '/db/output'
    for $doc in collection($data-collection)[ends-with(base-uri(.), '.html')]
    return 
        <item>
            <url>{base-uri($doc)}</url>
            <title>{$doc//*:h1/text()}</title>
        </item>
}
</result>
person adamretter    schedule 30.06.2014