使用 Saxon 9.6HE 对多个文件自动执行 xquery
Automating xquery execution against multiple files with Saxon 9.6HE
我有一个在文件中指定要读取的文档的查询。
我需要对许多文件执行此查询,因此我需要从命令行传递文件名之类的东西。
我不知道该怎么做。我该如何解决我的问题?
我的查询文件的示例是
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
最简单的方法是将源文档作为查询的上下文项传递。将查询更改为
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 和编译的开销对每个已处理文件的查询。
我有一个在文件中指定要读取的文档的查询。
我需要对许多文件执行此查询,因此我需要从命令行传递文件名之类的东西。
我不知道该怎么做。我该如何解决我的问题?
我的查询文件的示例是
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
最简单的方法是将源文档作为查询的上下文项传递。将查询更改为
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 和编译的开销对每个已处理文件的查询。