使用 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。)