xQuery on XML file with namespace
I'm using eXist-DB to store XML documents. Here's a sample XML file with the namespace info:
<?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&g开发者_StackOverflow社区t;
<name>
<family>Frost</family>
<middle>Bill</middle>
<first>Conrad</first>
</name>
</ClinicalDocument>
The query is :
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
I tried to declare the third namespace within the query but it doesn't seem to work.
The third namespace attribute (xmlns="urn:hl7-org:v3") binds the default namespace.
The syntax to define the default namespace for elements in XQuery is:
declare default element namespace "urn:hl7-org:v3";
However, redefining the default element namespace prevents your query from testing for nodes with no namespace!
A better way to do this is perhaps to bind a new prefix to this namespace:
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
精彩评论