我正在使用eXist-DB存储XML文档。这是一个带有命名空间信息的示例XML文件:
<?xml version="1.0" encoding="utf-8"?>
<ClinicalDocument xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:hl7-org:v3">
<name>
<family>Smith</family>
<middle>Blade</middle>
<first>John</first>
</name>
<name>
<family>Frost</family>
<middle>Bill</middle>
<first>Conrad</first>
</name>
</ClinicalDocument>
查询是:
declare namespace xsd = "http://www.w3.org/2001/XMLSchema";
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
for $x in doc("/db/HL7/cda2.xml")/ClinicalDocument/name
return $x/family
我试图在查询中声明第三个命名空间,但它似乎不起作用。
答案 0 :(得分:10)
第三个名称空间属性(xmlns =“urn:hl7-org:v3”)绑定默认名称空间。
为XQuery中的元素定义默认命名空间的语法是:
declare default element namespace "urn:hl7-org:v3";
但是,重新定义默认元素名称空间会阻止查询测试没有名称空间的节点!
更好的方法是将新前缀绑定到此命名空间:
declare namespace xsd = "http://www.w3.org/2001/XMLSchema";
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
declare namespace h17 = "urn:h17-org:v3";
for $x in doc("/db/HL7/cda2.xml")/h17:ClinicalDocument/h17:name
return $x/h17:family