我想我可以创建一些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
样本。不幸的是我无法使用它
答案 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。)。