我正在尝试从linux shell中找到一个简单的cli命令来执行xquery。我想要的是避免我需要安装的外部依赖(使用fedora 18)。
我已经找到的是我可以通过yum安装的saxon和xqilla。除非它们不在基本系统中,否则我可以使用它们。我希望找到的东西就像执行xslt处理的java内部类(com.sun.org.apache.xalan.internal.xsltc.cmdline.Transform)。
我的另一个想法是使用XSLT将文档转换为所需的xquery结果,但是单行不可能。
我可以用xqilla做什么的例子(但是搜索另一个实用程序):
$ xqilla -i TEST-com.ecample.testcase.MyTestCase.xml <(echo '/testsuite/@failures + /testsuite/@errors')
更新:不完全是我的问题,但我决定默认安装perl XML :: Twig并让我灵活地使用perl实现复杂的逻辑。这也带来了很好的速度提升,因为不需要为每个XML文件分叉进程。
答案 0 :(得分:3)
对于XQuery 1,我有Xidel。像这样工作:
$ xidel TEST-com.ecample.testcase.MyTestCase.xml -e 'xquery version "1.0"; /testsuite/@failures + /testsuite/@errors'
完全无依赖,但不在基本系统中,而不是java,并且它不支持XML模式......
答案 1 :(得分:3)
编辑:我刚注意到你说你已经找到撒克逊了。无论如何我都会留下我的答案,以防这个例子在将来帮助任何人。
您可以从命令行运行Saxon(XQuery)。您可以通过使用-q
指向包含XPath / XQuery的文件来执行此操作,也可以使用-qs
直接传递查询字符串。
以下是使用-qs
处理简单XPath的示例:
<强> input.xml中强>
<a>
<b id="x"/>
<b id="z"/>
<b id="x"/>
</a>
Saxon命令行(我使用Saxon9-HE进行测试)
java -cp "saxon9he.jar" net.sf.saxon.Query -s:"input.xml" -qs:"/a/b[@id='x']" -o:"results.xml"
<强> results.xml 强>
<b id="x"/><b id="x"/>
注意:我可以通过将-qs
更改为以下内容来使输出格式正确:
-qs:"<results>{/a/b[@id='x']}</results>"
有关更多命令行选项,请查看此处:http://www.saxonica.com/html/documentation/using-xquery/commandline.html
答案 2 :(得分:1)
JDK中没有捆绑XQuery处理器,因此您必须单独安装一个。目前尚不清楚为什么你认为这是一个问题。
答案 3 :(得分:1)
不幸的是(或者,如果你不欣赏XML,幸运的话),XML支持如果在Unix和Linux系统中非常零星的话。
您可以安装备受好评的XML Starlet system
否则,搜索xmllint总是有帮助的。但请注意,不同的基于操作系统的版本似乎具有不同的功能集,其中一些功能集远远超出了linting XML。但是,并不总是安装在基本路径中可见,所以
find / -name 'xmllint*' -ls 2>/dev/null > xmllintList.txt &
可能,在可能的一小时后+搜索发现你不知道的xml工具的整个目录!
IHTH。