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

Coldfusion使用SAX2DOM与Tagsoup解析HTML报错的解决咨询

问题解决:SAX2DOM模块访问错误及替代方案

错误原因

你遇到的错误是Java 9+模块系统的限制导致的:com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM是JDK内部包中的类,不属于公开API,模块系统默认禁止未命名模块(你的代码所在模块)访问内部导出的包。

关于库的状态

  • SAX2DOM(JDK内部版本):不属于公开可用的库,本质上是JDK内部实现细节,从未被官方推荐给外部使用,相当于“被弃用”——依赖它的代码在Java版本升级时极易崩溃。
  • TagSoup:本身是仍可使用的HTML解析库,但搭配JDK内部SAX2DOM的方案已经过时。

解决方法

方案1:使用公开的SAX2DOM实现

替换JDK内部的SAX2DOM为Apache官方提供的公开实现,比如Apache Xerces中的org.apache.xml.serializer.SAX2DOM:

  • 引入Xerces的依赖(如Maven依赖xercesImpl)
  • 将代码中引用com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM的地方替换为org.apache.xml.serializer.SAX2DOM

方案2:临时绕过模块限制(不推荐)

如果只是临时测试,可以在Java启动参数中添加模块导出配置:

--add-exports java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED

注意:此方法依赖JDK内部实现,后续Java版本更新可能导致代码失效,仅适合临时场景。

方案3:改用更现代的HTML解析库

推荐直接使用Jsoup,它专门处理脏HTML,无需手动做SAX到DOM的转换,代码更简洁可靠:

  • 引入Jsoup依赖
  • 示例代码:
Document doc = Jsoup.parse(new File("your-html-file.html"), "UTF-8");
// 直接操作DOM,比如提取元素
Elements links = doc.select("a[href]");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:32:52