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
相关产品推荐
相关产品推荐

