#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». Извините за путаницу. Как я уже сказал, программа не работает с любым значением, которое я ей установил.