我有一个方法可以从不同的网址解析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 上放置一个断点......并按照它进行操作以查看连接是否正确。希望有帮助。