在命令提示符下的Windows上使用java中的saxon xpath

时间:2014-03-26 22:48:37

标签: xml xpath saxon

我在commant提示符下运行此命令:

java -cp "saxon9he.jar" net.sf.saxon.Query -s:"xml document" -qs:'//Customer[@CustomerID="HUNGC"]//Country' -o:"results.xml"

我得到了这个: 源文档被忽略 - 查询不访问上下文项

有谁知道可能是什么问题以及如何解决? 谢谢!

3 个答案:

答案 0 :(得分:1)

警告意味着它所说的内容:您提供了一个源文档,但您的XPath表达式没有使用它。

如果您想了解XPath表达式不使用源文档的原因,请向我们展示您的XPath表达式。给出此警告的示例是-qs:“2 + 2”,其中表达式的结果为4,无论源文档中是否有任何内容。

(在你的评论之后)

我通常在表达式和单引号中使用双引号。它可能取决于你使用的shell,但我怀疑表达式已被传递给Saxon周围的单引号和所有,这意味着整个表达式只是一个字符串文字。 - Michael Kay 7小时前

答案 1 :(得分:0)

您收到此错误消息,因为您希望在可能不存在的文档(XPath expression)上执行无效的XPath表达式(xml document)。

用输入文档和要执行的查询替换字符串xml documentXPath expression

来自Saxon Command Line manual

  

<强> -qs:querystring

     

允许以内联方式指定查询(如果它包含空格,则需要在表达式周围引用以保持命令行处理器满意)。例如,当前目录中的java net.sf.saxon.Query -qs:doc('a.xml')//p[1] selects elements within the file a.xml

     

<强> -s:filename-or-URI

     

从指定文件中获取输入。如果指定了-u选项,或者名称以“file:”或“http:”开头,则假定该名称是URI而不是文件名。该文件必须包含XML文档。文档的文档节点作为上下文项可供查询使用。可以将源文档指定为“-”以从标准输入获取源。

答案 2 :(得分:0)

Here是一个如何使用Saxon作为XPath命令行工具的示例:

saxon () { java -cp saxon9he.jar net.sf.saxon.Query "$@" ; }
xpath () { saxon '!method=text' -s:- -qs:"$1" ; }

这是svn:

输出的示例
svn info --xml | xpath '/info/entry/repository/root/text()'