我需要使用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元素?
答案 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会更好。)