Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用Saxon 9.6HE对多个文件自动执行xquery_Xml_Command Line_Xquery_Saxon - Fatal编程技术网

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

Xml 使用Saxon 9.6HE对多个文件自动执行xquery,xml,command-line,xquery,saxon,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.

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

我需要对许多文件执行此查询,因此需要从命令行传递文件名之类的内容

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

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

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

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

for $i in . return $i
(简化为“.”)

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

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

declare variable $uri external; doc($uri)
然后

我从这个问题猜您没有找到saxonxquery命令行的文档:它在这里:


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

所有这些文件都有共同的目录结构吗?如果是这样,考虑在目录路径中传递并使用<代码>集合()/代码>来处理文件。@丹尼尔哈利,你是对的,我把这个添加到我的答案中。集合方法是不可行的,但是它是一个有趣的方法。
java net.sf.saxon.Query -q:query.xq uri=source.xml