2015-04-17 3 views
-1

В моей домашней работе я должен разобрать некоторые файлы sgml. Я использую SAXParser. он работает правильно для простого файла xml. но когда я хочу, чтобы разобрать домашнее задание sgml файлов эта ошибка происходит:sgml синтаксический разбор с парсером sax

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 имеет неверный формат - см конец сообщения об ошибке:

... А «(» символ или тип элемента требуется в объявление типа элемента «ЛЬЮИС»

ошибка упоминает 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 (например, SP Джеймса Кларка). Попытка разобрать SGML с использованием синтаксического анализатора XML похожа на попытку скомпилировать Java с компилятором C# - это не сработает.

0

Вы можете использовать инструмент XMLSPY, который будет проверять ваш SGML на данный xsd или dtd, если есть какая-либо ошибка, которую он будет показывать красным цветом, а затем вы можете вручную его исправить.

После его исправления вы можете продолжить обработку синтаксического анализа SAX.

 Смежные вопросы

  • Нет связанных вопросов^_^