用sax解析器解析sgml

时间:2015-04-17 09:52:37

标签: java xml saxparser sgml

在我的作业中,我应该解析一些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);

如何防止此错误?

请原谅我的英语不好

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

  

... A'('字符或元素类型在元素类型“LEWIS”的声明中是必需的。

错误提及lewis.dtd - 也许这就是故障所在。

你有一些选择:

  1. 修复你的dtd。
  2. 手动编辑xml文件,使其格式正确。
  3. 在将xml文件传递给解析器之前对其进行过滤 - 即时编辑它以使其形成良好。
  4. 使用容忍格式错误的xml的其他解析器。

答案 2 :(得分:0)

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

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