使用Saxon 9.6HE自动执行针对多个文件的xquery执行

时间:2017-02-26 21:35:11

标签: xml command-line xquery saxon

我有一个查询,在文件中指定要阅读的文档。

我需要针对许多文件执行此查询,因此我需要从命令行传递文件名等内容。

我不知道该怎么做。我怎样才能解决我的问题?

我的查询文件的一个例子是

for $i in doc("myfile") 
return $i

我正在使用此命令行

运行它
#!/bin/bash
java -cp "./tagsoup/tagsoup-1.2.1.jar:./saxon/saxon9he.jar" net.sf.saxon.Query -x:org.ccil.cowan.tagsoup.Parser  $1

1 个答案:

答案 0 :(得分:2)

最简单的方法是将源文档作为查询的上下文项传递。将查询更改为

for $i in . return $i

(简化为“。”)

并在命令行的-s:source.xml选项中设置源文档。

您还可以在查询中声明外部变量,并从命令行设置它们,例如

declare variable $uri external; doc($uri)

然后

java net.sf.saxon.Query -q:query.xq uri=source.xml

我想问你没有设法找到Saxon XQuery命令行的文档:它在这里:

http://saxonica.com/documentation/index.html#!using-xquery/commandline

请注意,尽管这是您问题的直接答案,但使用@DanielHaley建议的collection()方法可以获得更好的性能,因为它可以避免初始化Java VM和编译每个文件的查询的开销。处理完毕。