2015-04-17 58 views
-1

在我的作业中,我应该解析一些sgml文件。我使用SAXParser。它适用于简单的xml文件。但是当我想分析的功课sgml文件会出现此错误:用萨克斯解析器解析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); 

如何防止此错误?

原谅我的英语不好

+0

如何向我们展示可用的XML和失败的SGML? –

+0

@JanDoggen我使用本教程:http://www.javacodegeeks.com/2013/05/parsing-xml-using-dom-sax-and-stax-parser-in-java.html。它适用于教程中的示例xml。 –

回答

1

你的XML或者DTD格式有误 - 看到错误消息的末尾:

... A“(”字符或元素类型是必需的声明元素类型“刘易斯”的

的错误中提到lewis.dtd - 也许这就是故障是

。你有一些选择:

  1. 修复你的dtd。
  2. 手动编辑xml文件,使其格式良好。
  3. 在将xml文件传递给解析器之前先对其进行过滤,然后对其进行编辑以使其格式良好。
  4. 使用不同的解析器可以容忍畸形的xml。
+0

谢谢。我认为问题出在'lewis.dtd'上。但我没有任何知识从dtd文件 –

+0

@HamidrezaSamadi - 当然你可以找到'lineNumber:2; columnNumber:17;'在dtd中查看'LEWIS'类型的声明?那里有[许多](http://www.w3schools.com/dtd/dtd_examples.asp)示例。 – OldCurmudgeon

3

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

0

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

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