解析 RSS 时出错 -> org.xml.sax.SAXParseException;行号: 1;列数: 1;文件过早结束



我有一个方法可以从不同的网址解析RSS,并且效果很好:

例如:https://www.clarin.com/rss/lo-ultimo/

但是在其中一个 url (https://www.cio.com/category/mobile/index.rss( 和该网络的所有 RSS 中,当我执行代码时,控制台向我显示以下错误,并且解析器不起作用:

org.xml.sax.SAXParseException; 行号:1; 列数:1;文件过早结束。

我正在使用此方法(代码的一部分(解析RSS提要:

try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
URL url = new URL("https://www.cio.com/category/mobile/index.rss");
URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
Document doc = dBuilder.parse(inputStream);

错误发生在最后一行 ->文档文档 = dBuilder.parse(inputStream(;

在该代码中,我正在从 url 解析 RSS,奇怪的是,当我直接从文件(index.rss(解析 RSS 时,我没有错误并且解析效果很好,我使用以下方法执行此操作:

File fXmlFile = new File("index.rss");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(fXmlFile);

Document doc = dBuilder.parse(inputStream);

doc.getDocumentElement().normalize();

要注意:

  • 这是一个 maven 网络应用程序项目。
  • 部署在Tomcat 9.0服务器中。
  • 当我按下网络主页中的按钮时,该方法运行。

我之所以提到这一点,是因为当我在一个简单的 java 项目中尝试时,解析器也可以很好地与 inputStream 配合使用。

如果您能帮助我解决这个问题,我将不胜感激,谢谢!

我已经运行了以下代码,它工作正常,没有错误。

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
URL url = new URL("https://www.cio.com/category/mobile/index.rss");
URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
Document doc = dBuilder.parse(inputStream);
Element root = doc.getDocumentElement();
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
System.out.println(children.item(i));
}
inputStream.close();
}

然后我添加了以下内容并尝试解析一个空文件:

File fXmlFile = new File("EmptyFile.xml");
inputStream = new FileInputStream(fXmlFile);
doc = dBuilder.parse(inputStream);
System.out.println(doc.getDocumentElement());

当文件为空(或仅包含XML处理指令(时,我收到了您收到的错误。当我添加根元素时,错误消失了。在我看来,这似乎证明了当inputStream(或它正在流式传输的东西(基本上是空的时,就会发生此错误。这个理论似乎也得到了以下组织的支持:org.xml.sax.SAXParseException: *VALID* XML 文件的过早结束。因此,如果您仍然收到此错误,我建议您在 URL url 上放置一个断点......并按照它进行操作以查看连接是否正确。希望有帮助。

相关内容

  • 没有找到相关文章

最新更新