我有一些现有的代码可以解析顶级元素名称空间以确定我们正在查看的 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();
}
如果我允许解析器从 Web 加载 DTD,则getDocumentTypeDeclaraion()
包含一个巨大的字符串,其中包含比我知道如何处理更多的信息,因为它将所有相关的 DTD 插入到字符串中,然后再将其移交。另一方面,如果我阻止解析器从 Web 加载 DTD(出于显而易见的原因,这无论如何都是可取的),它只会给我字符串"<!DOCTYPE"
.
有没有办法取回 DOCTYPE 中的值?
我正在使用 JRE 附带的默认解析器,以防万一。