Я использую API-интерфейс, основанный на событиях StAX, для изменения потока XML. Поток представляет собой HTML-документ, содержащий декларацию DTD. Я хотел бы скопировать эту декларацию DTD в выходной документ (написанный с использованием XMLEventWriter
). Когда я прошу фабрику игнорировать DTD, она не будет загружать DTD, но удалит весь оператор и оставит строку «<!DOCUMENTTYPE
». Когда не игнорируется, весь DTD загружается и включается, когда verbatim выводит событие DTD. Я не хочу использовать время для загрузки этого DTD, но включаю полную спецификацию DTD (разрешающие объекты уже отключены, и мне это не нужно). Кто-нибудь знает, как отключить выбор внешних DTD.Как остановить Sun JDK1.6 встроенный анализатор StAX от разрешения объектов DTD
ответ
Вы должны иметь возможность реализовать пользовательский XMLResolver, который перенаправляет попытки извлечения внешних DTD на локальный ресурс (если ваш код анализирует только определенный тип документа, это часто является ресурсом класса прямо в JAR).
class CustomResolver implements javax.xml.stream.XMLResolver {
public Object resolveEntity(String publicID,
String systemID,
String baseURI,
String namespace)
throws XMLStreamException
{
if ("The public ID you expect".equals(publicID)) {
return getClass().getResourceAsStream("doc.dtd");
} else {
return null;
}
}
Обратите внимание, что в некоторых документах содержится только «идентификатор системы», поэтому вы должны вернуться к проверке этого. Проблема с системным идентификатором заключается в том, что он должен быть «системным» конкретным URL, а не общеизвестным стабильным URI. На практике это часто используется, как если бы это был URI.
См. Метод setXMLResolver.
Кроме того: ваш оригинальный подход (установка SUPPORT_DTD на false) может работать с Woodstox, если до сих пор вы использовали парсер Sax по умолчанию, поставляемый вместе с JDK 1.6.
- 1. Предоставление DTD-файла парсеру StAX
- 2. DTD-анализ с помощью Stax
- 3. Как остановить встроенный MPMoviePlayerViewController от скрытия statusBar
- 4. Как остановить Nashorn от разрешения функции quit()?
- 5. Как загрузить относительную систему DTD в парсер StAX?
- 6. Как остановить Eclipse IDE от попытки загрузить DTD для проверки?
- 7. stop stax parser от выполнения
- 8. Нужно событие CDATA, уведомляющее синтаксический анализатор stax для java
- 9. Встроенный анализатор в Xcode 3.1.4
- 10. Остановить встроенный UITableView от смещения по вертикали
- 11. Остановить встроенный проигрыватель Windows Media от цикла?
- 12. Как остановить статический анализатор Xcode от сообщения об утечке объекта?
- 13. Ошибка синтаксического анализа XML с помощью DTD Stax
- 14. Остановить java от запроса разрешения на соединение
- 15. Как остановить встроенный сервер gwt
- 16. Как я могу заставить стандартный XML-анализатор Go для чтения объектов DTD
- 17. Добавление данных в файл XML с помощью OutputStreamWriter (StAX анализатор)
- 18. синтаксического анализа XML с помощью StAX анализатор Java
- 19. Встроенный синтаксический анализатор заголовков в C#?
- 20. Есть минимальный DTD для разрешения ID?
- 21. Как изменить огромный файл XML от StAX?
- 22. Как остановить изображение Магия stripImage() от удаления данных разрешения
- 23. Как остановить IFileDialog от разрешения ярлыков до их целей?
- 24. Как загрузить встроенный DTD для использования с XDocument?
- 25. Как игнорировать встроенный DTD при анализе XML-файла в Java
- 26. Как использовать StAX вместо XPP для XStream?
- 27. Кодировка игнорирования Stax игнорировать
- 28. Лучшая реализация StAX
- 29. Есть ли календари Java от Mon-Sun или Sun-Sat?
- 30. DTD запрещен в этом документе XML - как изменить разрешения?
Настройка выполняется только при использовании древесного дерева. Я пытался использовать поставщика солнца. – 2008-11-21 19:32:10