【问题标题】:How to use Saxon XPath processor w/o coding in Java如何在 Java 中使用不带编码的 Saxon XPath 处理器
【发布时间】:2012-02-18 08:12:04
【问题描述】:

我想我可以制作一些 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 脚本也足够了

更新:
浏览撒克逊documentation,我发现了XPathExample 样本。可惜我不能用它

【问题讨论】:

    标签: xml xpath command-line saxon


    【解决方案1】:

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

    这是一个使用-qs 处理简单XPath 的示例:

    input.xml

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

    Saxon 命令行(我使用 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:"&lt;results&gt;{/a/b[@id='x']}&lt;/results&gt;"。

    更多命令行选项,看这里:http://www.saxonica.com/html/documentation/using-xquery/commandline.html

    【讨论】:

    • 好的,谢谢。我刚开始学习 XML,需要简单的 XPath 2.0 处理器。我不知道我可以像那样使用 XQuery。 saxon-xquery in /usr/bin/ 是 java -classpath /usr/share/java/saxonb.jar net.sf.saxon.Query "$@" 的快捷方式,无法在 sn-p 参数之上执行,但像在您的示例中那样从字面上唤起 (saxon9he.jar) 效果很好。
    【解决方案2】:

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

    【讨论】:

    • 当然,但那是商业Java软件,它也需要高端机器才能完全有用。对于 XPATH 评估,在本地或通过 HTTP,saxon 或 xmllint 已经足够了,并且可以集成到用户喜欢的任何工具/编辑器中。
    • 它是商业软件;撒克逊人也是如此。 :-) 与 Saxon 一样,oXygen 是非常好的商业软件,物有所值,尤其是如果您使用 XML 进行各种工作。不,您不需要高端机器;我 2 岁的笔记本电脑运行良好。考虑到 OP 的要求,这是一个可行的选择;选择越多越好。
    • 我不这么认为。还有各种商业和非商业产品可以执行 XPATH,或者使用已经可用的处理器来完成这项工作。 Oxygen 远非好的建议: 1. 它的设计目的不仅仅是 XPATH,而且可能会让想要这样做的用户感到困惑; 2.它至少需要具有大量RAM的良好多核CPU才能使用; 3.你可以用Java GUI中的XPATH处理器购买自己的新PC,你可以从终端免费完成
    • 我同意詹姆斯的观点,氧气是一个不错的选择。这不是每个人的最佳选择,但对某些人来说是一个非常好的选择。如果您获得学术版本和/或有资格参加他们的外展计划(以前称为“支持生活”),氧气会非常便宜。如果这不是您的最佳选择,那很好,但这不会降低 James 回答的价值。
    【解决方案3】:

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

    请注意,当前的开源 Saxon 版本是 Saxon-HE 9.4.0.2。您可以通过命令行上的 -t 选项找出您正在使用的版本。听起来您可能已经找到了与您的 Linux 发行版捆绑在一起的旧版本 (Saxon-B),而 @prunge 为您指出了仅支持 XSLT 1.0 和 XPath 1.0 的更旧版本 (Saxon 6.5)。

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

    【讨论】:

    • 感谢您的意见。版本是 9.0.0.4 - 这是 Ubuntu 11.04 的默认值。我从 SourceForge 下载了最新版本,之后我成功执行了 XPath 模式。我将卸载 Ubuntu 版本并在 /usr/bin/ 中创建新的方便快捷方式。我似乎找不到从输出中抑制 XML 声明的选项,你
    • 发现输出方法可以用作参数,例如:\!"method=text" in bash。在sh 中不需要反斜杠
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多