为什么xqilla找不到命名空间?

时间:2017-03-14 21:41:18

标签: xpath xquery xmlstarlet xidel xqilla

这是失败的,我不确定这是 xqilla 的限制或错误:

xqilla -i file.xml <(echo "//abcd:case[@xyz:displayName='locate']/abcd:condition/text()")
/dev/fd/63:1:3: error: No namespace for prefix 'abcd' [err:XPST0081]

但是,我可以使用它:

$ xqilla -i file.xml <(echo "//*:case[@*:displayName='locate']/*:condition/text()")

            hello world

在同一个file.xml上使用 xidel

$ xidel file.xml --extract '//abcd:case[@xyz:displayName="locate"]/abcd:condition/text()'
**** Retrieving: x.bpel ****
**** Processing: x.bpel ****
hello world

在同一个file.xml上使用 xmlstarlet

$ xml sel -t -v '//abcd:case[@xyz:displayName="locate"]/abcd:condition/text()' file.xml

            hello world

如何让 sqilla 找到命名空间?

更新:我想通过创建另一个文件来添加,如何让它适用于 sqilla

$ cat newfile
declare namespace xyz="http://www.ibm.com/xmlns/prod/websphere/business-process/6.0.0/";
declare namespace abcd="http://schemas.xmlsoap.org/ws/2004/03/business-process/";
doc("file.xml")//abcd:case[@xyz:displayName='locate']/abcd:condition/text()

然后通过以下方式调用它:

$ xqilla newfile

            hello world

它应该如何适用于 sqilla

1 个答案:

答案 0 :(得分:1)

它无法正常工作的原因是因为XQilla在命名空间方面非常敏感 - 因此是初始错误[err:XPST0081]。可以在http://xqilla.sourceforge.net/CommandLine?show_comments=0找到更多命令行信息。