использование xquery для извлечения значения атрибута из xml, который содержит пространства имен - PullRequest
2 голосов
/ 05 августа 2011

Я пытаюсь извлечь значение атрибута элемента в следующем XML-файле

<catalog xmlns="http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0" xmlns:xlink="http://www.w3.org/1999/xlink" name="TimeSeriesServer THREDDS Catalog">
    <service base="http://tsds.net/tsds/" serviceType="OpenDAP"/>
    <catalogRef xlink:title="local" xlink:href="test/ncml_catalog.thredds"/>
    <catalogRef xlink:title="remote" xlink:href="http://virbo.org/metamag/viewDataFile.jsp?docname=C6D5623A-ADEC-8397-88A7-DD62A37BA490&amp;filetype=data"/>
</catalog>

и xquery

declare namespace prefix= "http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0";
declare namespace xlink="http://www.w3.org/1999/xlink";

let $xslt:= "/db/virbo/xq/merge/merge.xsl"
let $xml := "/db/virbo/xq/merge/F8ADA960-F16B-5F72-6B09-BE1FE64E5BB1.xml"

return 
   <li>{doc($xml)/prefix:catalog/prefix:catalogRef/@tile}</li>

это должно дать мне test/ncml_catalog.thredds и http://virbo.org/metamag/viewDataFile.jsp?docname=C6D5623A-ADEC-8397-88A7-DD62A37BA490&amp;filetype=data но последняя строка кажется не работает и не знаю почему. Спасибо за

1 Ответ

2 голосов
/ 05 августа 2011

Ваш @title соответствует атрибуту title в пространстве имен, но вы ищете элемент title в пространстве имен xlink. Изменение теста на @xlink:title исправит это.

Путь возвращает узел атрибута, который затем копируется в элемент li, что даст результат примерно так:

<li xlink:title="..." />

Хотя я подозреваю, что вы на самом деле хотите получить данные из атрибута.

Измените свою последнюю строку на

<li>{doc($xml)/prefix:catalog/prefix:catalogRef/@xlink:tile/data(.)}</li>

и все должно работать.

...