使用 eXist-db 使用 xpath 和 xquery 解析 xml 文件
Parsing xml file with xpath and xquery using eXist-db
我需要使用 XQuery(我使用的是 eXist-db)从以下 XML 中获取 <TITLE>
元素。
<?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
我认为问题与 <ClinicalDocument>
标签中存在的 xmlns
属性有关:
<ClinicalDocument xmlns="urn:hl7-org:v3">
如何修改我的 XQuery 以检索所需的 XML 元素?
声明映射到您的 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
对于任何命名空间,您可以使用 * 通配符代替命名空间前缀。
所以如果你只想要标题的文本,你可以这样做:
doc("/db/apps/demo/data/hamlet.xml")/*:ClinicalDocument/*:PLAY/*:TITLE/text()
不再需要定义命名空间。 (虽然您会发现具有命名空间的已定义模式在长期 运行 中可以更好地使用 XQuery。)
我需要使用 XQuery(我使用的是 eXist-db)从以下 XML 中获取 <TITLE>
元素。
<?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
我认为问题与 <ClinicalDocument>
标签中存在的 xmlns
属性有关:
<ClinicalDocument xmlns="urn:hl7-org:v3">
如何修改我的 XQuery 以检索所需的 XML 元素?
声明映射到您的 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
对于任何命名空间,您可以使用 * 通配符代替命名空间前缀。
所以如果你只想要标题的文本,你可以这样做:
doc("/db/apps/demo/data/hamlet.xml")/*:ClinicalDocument/*:PLAY/*:TITLE/text()
不再需要定义命名空间。 (虽然您会发现具有命名空间的已定义模式在长期 运行 中可以更好地使用 XQuery。)