java html解析成xml文件_在Java中解析包含HTML实体的XML文件,而无需更改XML

我必须解析一些Java文件,这些文件有时候是无效的,它包含HTML实体,例如& mdash;& gt;等等。我理解正确的处理方法是在解析之前向XML文件添加适当的实体声明。但是,我无法做到这一点,因为我无法控制这些XML文件。

是否有某种回调,我可以覆盖在Java XML解析器遇到这样一个实体时被调用?我没有能够在API中找到一个。

我想用:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder parser = dbf.newDocumentBuilder();

Document doc = parser.parse( stream );

我发现我可以在org.xml.sax.helpers.DefaultHandler中覆盖resolveEntity,但是如何使用更高级别的API?

这是一个完整的例子:

public class Main {

public static void main( String [] args ) throws Exception {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder parser = dbf.newDocumentBuilder();

Document doc = parser.parse( new FileInputStream( "test.xml" ));

}

}

with test.xml:

Some text — invalid!

生产:

[Fatal Error] :3:20: The entity "nbsp" was referenced, but not declared.

Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 20; The entity "nbsp" was referenced, but not declared.

更新:我一直在使用JDK源代码调试器,而男孩,有多少意大利面。我不知道设计在那里,还是有一个。只有几层洋葱可以在一层之上呢?

他们的关键类似乎是com.sun.org.apache.xerces.internal.impl.XMLEntityManager,但是我找不到任何可以让我在使用之前添加东西的代码,或尝试在不经过的情况下解析实体那个班。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值