-1

在我的作业中,我应该解析一些sgml文件。我用SAXParser. 它适用于一个简单的xml文件。但是当我想解析作业sgml文件时,会发生此错误:

Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:///C:/Users/MarkaZ%20Computer%20RooZ/Documents/workspace/HW_02_IR/lewis.dtd; lineNumber: 2; columnNumber: 17; A '(' character or an element type is required in the declaration of element type "LEWIS".

我没有任何dtd文件知识。我的代码是:

 SAXParserFactory parserFactor = SAXParserFactory.newInstance();
            SAXParser parser = parserFactor.newSAXParser();
            SAXHandler handler = new SAXHandler();


parser.parse(new FileInputStream("reut2-000.sgm"), handler);

我怎样才能防止这个错误?

对不起我的英语不好

4

3 回答 3

3

如果要解析 XML,请使用 XML 解析器。如果要解析 SGML,请使用 SGML 解析器(例如,James Clark 的 SP)。尝试使用 XML 解析器解析 SGML 就像尝试使用 C# 编译器编译 Java 一样——它不起作用。

于 2015-04-17T13:39:47.387 回答
1

您的 xml 或 dtd 格式错误 - 请参阅错误消息的结尾:

...在元素类型“LEWIS”的声明中需要一个 '(' 字符或元素类型。

错误提到lewis.dtd- 也许这就是错误所在。

你有一些选择:

  1. 修复你的 dtd。
  2. 手动编辑 xml 文件,使其格式正确。
  3. 在将 xml 文件传递​​给解析器之前对其进行过滤 - 即时对其进行编辑以使其格式良好。
  4. 使用能够容忍格式错误的 xml 的不同解析器。
于 2015-04-17T09:58:13.723 回答
0

您可以使用 XMLSPY 类型的工具,该工具将根据给定的 xsd 或 dtd 验证您的 SGML,如果有任何错误,它将以红色显示,然后您可以手动更正它。

更正后,您可以继续使用 SAX 对其进行解析。

于 2015-04-17T13:44:58.297 回答