У меня есть некоторый существующий код, который анализирует пространство имен элемента верхнего уровня, чтобы определить, какой тип XML-файла мы просматриваем.
XMLEventReader reader = createXMLEventReader(...);
try {
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
switch (event.getEventType()) {
case XMLStreamConstants.DTD:
// No particularly useful information here?
//((DTD) event).getDocumentTypeDeclaraion();
break;
case XMLStreamConstants.START_ELEMENT:
formatInfo.qName = ((StartElement) event).getName();
return formatInfo;
default:
break;
}
}
} finally {
reader.close();
}
Если я разрешу парсеру загружать DTD из Интернета,getDocumentTypeDeclaraion()
содержит гигантскую строку, содержащую гораздо больше информации, чем я знаю, поскольку он вставляет все связанные DTD в строку перед передачей.С другой стороны, если я блокирую загрузчик DTD, загружаемый из Интернета (что в любом случае желательно по понятным причинам), он выдаст только строку: "<!DOCTYPE"
.
Нет ли способа вернуться назад?значения внутри DOCTYPE?
Я использую парсер по умолчанию, который поставляется с JRE, на случай, если это имеет значение.