使用xquery从包含命名空间的xml中提取属性值

时间:2011-08-05 14:41:34

标签: xquery

我正在尝试在以下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.threddshttp://virbo.org/metamag/viewDataFile.jsp?docname=C6D5623A-ADEC-8397-88A7-DD62A37BA490&amp;filetype=data  但最后一行似乎不起作用,不知道为什么。谢谢inadvance

1 个答案:

答案 0 :(得分:2)

您的@title与没有命名空间中的title属性匹配,但您正在xlink命名空间中查找title元素。将测试更改为@xlink:title将解决此问题。

路径返回一个属性节点,然后将其复制到li元素中,结果如下:

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

我怀疑你确实想要属性中的数据。

将您的最后一行更改为

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

一切都应该有效。