Синтаксический анализ XML в JAVA SAX без заполнения атрибутов по умолчанию

#java #xml #sax

#java #xml #sax

Вопрос:

Я пытаюсь проанализировать данный XML в соответствии с DTD, используя javax.xml.parsers.SAXParser. Но я просто не хочу, чтобы атрибуты по умолчанию заполнялись на основе DTD. Итак, я попробовал setFeature SAXParserFactory, как описано в http://xerces.apache.org/xerces2-j/features.html#nonvalidating.load-dtd-grammar:

 SAXParserFactory fact = SAXParserFactory.newInstance();
fact.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
  

Но, похоже, это не работает! Я все еще получаю выходные данные с заполненными атрибутами по умолчанию! Не могли бы вы, пожалуйста, сообщить мне, как это исправить?

Комментарии:

1. Я обновил свой первоначальный вопрос. Ранее значение load-dtd-grammar было установлено в true; это была опечатка, моя ошибка! Программа не работает независимо от значения (true / false) Я установил эту функцию.

2. Вы уверены, что используете анализатор xerces?

3. Наконец, я написал свой собственный анализатор для этой цели, и он хорошо работает. Вероятно, я выложу это в github / sourceforge.

Ответ №1:

Ответ у вас прямо перед глазами. По ссылке, которой вы делитесь:

Верно: Загрузите DTD и используйте его для добавления атрибутов по умолчанию и установки типов атрибутов при синтаксическом анализе.

False: создайте грамматику, но не используйте атрибуты по умолчанию и информацию о типах атрибутов, которая в ней содержится.

Итак, вы должны запустить его, установив для этой функции значение false:

 SAXParserFactory fact = SAXParserFactory.newInstance(); fact.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
  

Комментарии:

1. Спасибо за ваше предложение. Но программа не работает независимо от значения (true / false) Я установил его. Кроме того, на самом деле в моем вопросе я хотел представить его с помощью load-dtd-grammar, для которого установлено значение «false», но я ошибочно поместил его как «true». Извините за путаницу. Как я уже сказал, программа не работает с любым значением, которое я ей установил.