使用eXist-db解析xpath和xquery的xml文件

时间:2016-02-08 05:23:28

标签: xml xpath exist-db

我需要使用XQuery从以下XML中获取<TITLE>元素(我使用的是eXist-db)。

<?xml-stylesheet href="shakes.xsl" type="text/xsl"?>
<!--!DOCTYPE PLAY PUBLIC "-//PLAY//EN" "play.dtd"-->
<ClinicalDocument xmlns="urn:hl7-org:v3">
    <PLAY>
        <TITLE>The Tragedy of Hamlet, Prince of Denmark</TITLE>
    </PLAY>
</ClinicalDocument >

当我尝试使用下面的XQuery时,我没有得到预期的输出。

xquery version "3.0";

doc("/db/apps/demo/data/hamlet.xml")/ClinicalDocument/PLAY/TITLE

我认为问题与xmlns标记中的<ClinicalDocument>属性有关:

<ClinicalDocument xmlns="urn:hl7-org:v3">

如何修改我的XQuery以检索所需的XML元素?

2 个答案:

答案 0 :(得分:1)

声明映射到XML默认命名空间的前缀,并使用该前缀引用命名空间中的元素,如下所示:

declare namespace d = "urn:hl7-org:v3";
doc("/db/apps/demo/data/hamlet.xml")/d:ClinicalDocument/d:PLAY/d:TITLE

在此测试:http://www.xpathtester.com/xquery/a88f300bbeacdbd846d7aec887d48a0b

答案 1 :(得分:1)

对于任何名称空间,您可以使用*通配符代替名称空间前缀。

因此,如果你只想要标题的文字,你可以这样做:

doc("/db/apps/demo/data/hamlet.xml")/*:ClinicalDocument/*:PLAY/*:TITLE/text()

不再需要定义命名空间。 (虽然您会发现使用带有命名空间的已定义模式使得从长远来看,使用XQuery会更好。)