简单的命令行xquery

时间:2012-12-17 16:32:39

标签: java xml linux bash xquery

我正在尝试从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文件分叉进程。

4 个答案:

答案 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。