我有一个使用parse下载和解析的Java SAXparser(新的InputSource(conn.getInputStream()))。不幸的是,有时它在下载站点的xml时出错:“XML或文本声明不在实体的开头” 显然这是不好的xml,声明必须是第一个:
<!DOCTYPE ... stuff here ...>
<?xml ... stuff here ...?>
不幸的是,似乎没有办法忽略这个错误。我想我可以下载整个xml,然后使用正则表达式或其他东西来修复它,然后解析它,但似乎这不会有解析的好处,因为它正在下载?有没有办法在解析时替换它?
答案 0 :(得分:1)
看看Jsoup。它可以处理格式错误的xml。
答案 1 :(得分:1)
简易解决方案:从流中读取第一行,消耗这些字节,然后将其传递给解析器。
正确的Java解决方案:创建一个包含任何类型流的中间流接口,并提供与SAX解析器兼容的流。然后创建一个专门为您的案例实现该接口的类。
这样,您可以在有问题的标头到达SAX解析器之前检测到它。
编辑:我只使用Apache commons XML解析器或DOM解析器而不是SAX。此外,除非您的XML 真的长,否则在下载期间或之后解析它的差别不大。