当前位置: 首页 > 知识库问答 >
问题:

错误解析RSS->org.xml.sax.SAXParseExcture; lineNumber: 1;列号: 1;文件提前结束

墨翔宇
2023-03-14

我有一种从不同url解析RSS的方法,效果非常好:

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

但是在其中一个url中(https://www.cio.com/category/mobile/index.rss)在该web的所有RSS中,当我执行代码时,控制台向我显示以下错误,解析器无法工作:

组织。xml。萨克斯。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);

错误发生在最后一行-

在这段代码中,我正在从url解析RSS,奇怪的是,当我直接从文件(index.RSS)解析RSS时,我没有错误,而且解析效果很好,我使用以下方法进行解析:

File fXmlFile=新文件(“index.rss”)

DocumentBuilderFactory dbFactory=DocumentBuilderFactory。newInstance()

DocumentBuilder-dBuilder=dbFactory。newDocumentBuilder()

文档doc=dBuilder.parse(fXmlFile);

documentdoc=dBuilder。解析(输入流)

doc.getDocumentElement()

注意:

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

我提到这一点是因为当我在一个简单的java项目中尝试时,解析器也可以很好地处理inputStream。

如果你能帮助我,我将不胜感激,谢谢!


共有1个答案

亢奇
2023-03-14

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

     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。萨克斯。SAXParseException:*有效*XML的文件过早结束。因此,我建议,如果您仍然收到此错误,请在URL上设置断点。。。然后继续查看连接是否正确。希望有帮助。

 类似资料:
  • 问题内容: 我在控制台中遇到这个问题,在控制台中尝试输出函数本身可以工作,但是输出变量或常量却行不通。 如您在此处看到的,尽管您认为var / let拥有的内容,但是Swift却以某种方式找不到它… 问题答案: 因此,事实证明过去可能存在一个错误,即当您添加Swift文件时,它会添加/询问一个Bridging标头,但不会将该行添加到您的项目中 这意味着您将保持这种状态 导致! 我只能找到原因,因为

  • 我很抱歉,如果这是一个重复的问题--我找了一个文件,发现了很多类似的问题,但没有什么是完全相同的。 [错误]文件提前结束。http://api.dss.gov.au/dataCollection/dex的第1行?wsdl&type=xsd&file=文件%3a%2fc%3a%2ftfs%2fccsapps%2fdataCollection%2f分支%2fmr17.11%2fosb%2fdataCo

  • Be on your guard! If another disciple sins, you must rebuke the offender, and if the same person sins against you seven times a day, adn turns back to you seven times and says, 'I repent,' you must fo

  • 我想分享 /Internal存储/aaa/bbb.dat文件到另一个应用程序通过FileProvider。但它出错了。 我已经将路径放入了provider\u path。xml并将提供程序放入清单文件中。 我希望gmail或midrop/shareme能够打开和bbb。dat文件附呈。但它出错了 显示 提供者路径。xml 我是根据这些帖子编写代码的 Android:自定义外部存储文件夹上的文件提供

  • 演示清理调制解调器singUpForm不工作!!问题出在以下级别:Container content=BoxLayout。encloseY(新标签(“注册”、“LogoLabel”)、新FloatingHint(用户名)、createLineSeparator()、新FloatingHint(电子邮件)、createLineSeparator()、新FloatingHint(密码)、createL

  • <?xml version=“1.0”encoding=“UTF-8”?> ** 和xml文件的bebinning: <?xml version=“1.0”encoding=“UTF-8”?> ... 即将出现的错误: 原因:org.xml.sax.SAXParseException;行号:2;列号:1;Prolog中不允许包含内容。在org.apache.xerces.parsers.dompa