java - 在 Java 中解析大型 XML 文件时出现文件未找到异常

标签 java xml parsing xml-parsing

我正在使用 SAX(XML 的简单 API)来解析 XML 文档。该文档是一个巨大的 XML 文件(dblp.xml - 1.46 GB),我编写了几行解析器并在小文件上进行了测试,它可以工作。 Here is my projects hierarchy

Sample.XML 和 Student.XML 是具有几行 XML 的小文件,我的解析器会解析它们,但是当我将路径更改为 dblp.XML 时,它会生成文件未找到异常(文件仍然与其他示例文件一起存在,但它的尺寸很大) 这是我得到的异常:

java.io.FileNotFoundException: E:\Workspaces\Java\SaxParser\xml\dblp.dtd (The system cannot find the file specified)

这是我的代码:

package com.teamincredibles.sax;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Parser extends DefaultHandler {

  public void getXml() {
    try {
      SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
      SAXParser saxParser = saxParserFactory.newSAXParser();
      final MySet openingTagList = new MySet();
      final MySet closingTagList = new MySet();
      DefaultHandler defaultHandler = new DefaultHandler() {

        public void startDocument() throws SAXException {
          System.out.println("Starting Parsing...\n");
        }

        public void endDocument() throws SAXException {
          System.out.print("\n\nDone Parsing!");
        }

        public void startElement(String uri, String localName, String qName,
          Attributes attributes) throws SAXException {
          if (!openingTagList.contains(qName)) {
            openingTagList.add(qName);
            System.out.print("<" + qName + ">\n");
          }
        }

        public void characters(char ch[], int start, int length)
        throws SAXException {
          /*for(int i=start; i<(start+length);i++){
            System.out.print(ch[i]);
        }*/
        }

        public void endElement(String uri, String localName, String qName)
        throws SAXException {
          if (!closingTagList.contains(qName)) {
            closingTagList.add(qName);
            System.out.print("</" + qName + ">");
          }
        }
      };

      saxParser.parse("xml/dblp.xml", defaultHandler);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String args[]) {
    Parser readXml = new Parser();
    readXml.getXml();
  }
}

我不明白这是怎么回事。

最佳答案

您的 XML 文件是否引用 DTD,在本例中为“dblp.dtd”。

如果是,请检查其是否位于“E:\Workspaces\Java\SaxParser\xml\”位置。如果没有,请将其放在该位置并运行您的代码。

关于java - 在 Java 中解析大型 XML 文件时出现文件未找到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29360820/

相关文章:

java - Hazelcast MapStrore#store()

java - 使用 WebDriver 无法通过 CSS 选择器找到 WebElement

java - 使用scanner/reader/bufferedreader读取文本文件以读取.txt文件中的数字

java - 如何为自定义 baseadapter 类中的项目设置自定义 ListView 字体

PHP:如何使用 SimpleXMLElement 处理 &lt;![CDATA[?

java - 在 jdk 11 中序列化 xml 文档时,LSSerializer 缺少 xmlns 属性(在 jdk 8 中工作正常)

android - 根据变量更改单个 ListView 中的文本颜色

java - Jenkins Build - 找不到 Java 类

swift - 在 iOS Swift 3.1 中不知道该类型时如何在 Struct 对象中设置值?

python - pyparsing ParseException : Expected end of line -- general questions 问题