如何在Java中使用没有编码的Saxon XPath处理器

时间:2012-01-25 04:11:40

标签: xml xpath command-line saxon

我想我可以创建一些XSL样式表,然后将其用作带参数选项的模板,在命令行上使用Saxon XSLT处理器评估XPath表达式,如:

<xsl:template match="/">
  <xsl:copy-of select="saxon:evaluate($xpath-param)"/>
</xsl:template>

另一种可能性是使用他们的Java API:http://www.saxonica.com/documentation/xpath-api/intro.xml但我不懂Java

有没有办法让Saxon从命令行评估XPath表达式?
如果可能的话,Shell脚本也足够了

更新:
浏览Saxon documentation,我发现了XPathExample样本。不幸的是我无法使用它

3 个答案:

答案 0 :(得分:6)

您可以从命令行运行Saxon(XQuery)。您可以通过使用-q指向包含XPath / XQuery的文件来执行此操作,也可以使用-qs直接传递查询字符串。

以下是使用-qs处理简单XPath的示例:

<强> input.xml中

<a>
  <b id="x"/>
  <b id="z"/>
  <b id="x"/>
</a>

撒克逊命令行(我用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

答案 1 :(得分:1)

正如@DanielHaley所说,从命令行使用XQuery是一个更好的选择。从命令行提供XPath不会非常有用,因为XPath无法控制输出的格式。 XPath是XQuery的一个子集,因此如果您愿意,可以使用XQuery接口来评估XPath表达式。

请注意,当前版本的开源Saxon是Saxon-HE 9.4.0.2。您可以在命令行上找到使用-t选项的版本。听起来好像你可能找到了与你的Linux发行版捆绑在一起的旧版本(Saxon-B),并且@prunge指向了一个甚至更旧的版本(Saxon 6.5),它只支持XSLT 1.0和XPath 1.0。

更新:截至2019年1月,当前版本的Saxon为9.9.0.2

答案 2 :(得分:1)

另一种选择是在工具中使用XPath,例如oXygen。它的XPath Builder View是一个非常方便的接口,用于构建和测试XPath表达式。该工具有一个Linux version,它内置支持Saxon和其他处理器(Xerces,LIBXML,XSV,MSXML4.0,MSXML .NET和SQC。)。

enter image description here