0

这是失败的,我不确定这是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工作?

4

1 回答 1

1

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

于 2017-03-17T18:32:29.310 回答