You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在eXist-db中启用Saxon性能分析并输出profile.html?

在eXist-db中使用Saxon生成性能分析HTML报告

是的,可以实现。由于eXist-db内置的transform:transform()函数并未直接暴露Saxon性能分析的配置选项,你需要通过XQuery调用Saxon的Java API来手动配置并生成profile.html报告。以下是具体步骤:

前提条件

  • 确保你的eXist-db使用的是Saxon PE/EE版本(性能分析是PE/EE专属功能,免费的HE版本不支持)。
  • 确认eXist-db的类路径中已包含Saxon PE/EE的JAR包。

实现步骤

通过XQuery直接实例化Saxon的TransformerFactory,配置性能分析监听器并指定报告输出路径:

xquery version "3.1";

declare namespace java="http://exist-db.org/xquery/java";

(: 初始化Saxon TransformerFactory :)
let $factory := java:new("net.sf.saxon.TransformerFactoryImpl")

(: 启用HTML格式的性能分析,设置报告输出路径(需确保eXist-db有写入权限) :)
let $_ := java:setAttribute(
    $factory, 
    "http://saxon.sf.net/feature/traceListenerClass", 
    "net.sf.saxon.trace.HTMLTraceListener"
)
let $_ := java:setAttribute(
    $factory, 
    "http://saxon.sf.net/feature/traceOutputFile", 
    "/opt/exist/data/profile.html"  (: 替换为你需要的路径 :)
)

(: 加载eXist-db内的样式表和源文档 :)
let $stylesheet := doc("/db/stylesheets/your-stylesheet.xsl")
let $source := doc("/db/data/your-source.xml")

(: 创建转换器并设置参数(如有需要) :)
let $transformer := java:newTransformer($factory, $stylesheet)
let $_ := java:setParameter($transformer, "your-param-name", "param-value")

(: 执行转换,同时生成性能报告 :)
let $result := java:new("javax.xml.transform.stream.StreamResult", java:new("java.io.FileOutputStream", "/opt/exist/data/output.xml"))
let $_ := java:transform($transformer, java:new("javax.xml.transform.dom.DOMSource", $source), $result)

return "转换完成,性能报告已生成至指定路径"

关键注意事项

  • 路径权限:指定的traceOutputFile路径必须是eXist-db进程有写入权限的目录(比如eXist的data目录),否则会抛出权限异常。
  • 版本兼容性:如果使用Saxon 12+,部分类路径可能略有调整,需根据实际版本调整全类名。
  • 替代方案:若需全局配置,可尝试修改eXist-db的conf.xml,在TransformModule的配置中添加Saxon属性,但需重启eXist生效(不过这种方式灵活性不如XQuery动态配置)。

内容的提问来源于stack exchange,提问作者lschult2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:26:12