我有一个带有XML文档集合的eXist-db。所有文档的顶部节点中都有一个命名空间
<TEI xmlns="http://www.tei-c.org/ns/1.0" version="5.0" xml:id="No-MM_N0001-01">
当我尝试从REST API中查询// div / p中的信息时,我得到一个空响应:
Request:
/data?_query=%2F%2Fdiv%2Fp
Response:
<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" exist:hits="0" exist:start="1" exist:count="0" exist:compilation-time="3" exist:execution-time="3"/>
但是当我编辑其中一个文档时,删除xmlns,我从已编辑的文档中获取数据。
Request:
/data?_query=%2F%2Fdiv%2Fp
Response:
<exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" exist:hits="2" exist:start="1" exist:count="2" exist:compilation-time="1" exist:execution-time="1">
<p>
Jeg fik ikke sove –
<del rend="overstrike">j</del>
så den
<lb/>
lille striben mellem ridauerne lysne
<lb/>
mere og mere –
<del rend="overwritten">v</del>
jeg vendte mig hed
<lb/>
i sengen – Det var
<del rend="overstrike">jo</del>
så tydeli –
所以问题是,如何在不编辑所有名称空间的情况下查询集合中的XML文档?
答案 0 :(得分:0)
您有很多选择。距我头顶只有几步:
您可以发送XPath //*:div/*:p
这基本上使用通配符前缀,表示“任何名称空间”。
您可以将XQuery HTTP传递到REST API,而不是将HTTP GET与_query
一起使用,这将允许您在XQuery中声明名称空间绑定并使用适当的XPath,例如>
declare namespace tei = "http://www.tei-c.org/ns/1.0";
//tei:div/tei:p
类似于(2),但是您可以将XQuery作为文件预先存储在数据库中,然后通过REST API上的HTTP GET调用该文件,这将导致XQuery被执行。
其他选项也是可能的...