2015-04-17 109 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解析它。