BaseX只读用户无法用doc()读取XML文档,求高效替代方案
BaseX只读用户读取XML文档的替代方案
- 问题根源:
doc()函数在BaseX中,即便目标文档已存在,其内部逻辑仍可能涉及文档节点的创建操作,触发只读用户的权限限制。 - 解决方案:使用BaseX专属的
db:get()函数直接读取数据库内的现有文档,该函数仅执行读取操作,不会触发创建权限检查,且效率与doc()相当(毫秒级响应)。
修改后的查询文档(getDoc.xml)
<query> <text><![CDATA[ let $doc-name := 'example.xml' return db:get($doc-name) ]]></text> </query>
注:如果操作的不是默认数据库,需指定数据库名称,格式为
db:get('数据库名', 'example.xml')
验证curl命令
curl -s --data-binary '@getDoc.xml' 'http://reader:readersPW@localhost:8080/rest'
补充方案
如果需要通过路径而非文档名读取,也可以使用collection()函数结合文档路径,示例如下:
collection('/')/example.xml
该方式同样仅读取现有文档,不会触发创建权限问题,效率也能满足毫秒级要求。
内容的提问来源于stack exchange,提问作者leu
相关产品推荐
相关产品推荐

