最上位の要素の名前空間を解析して、調べている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に付属しているデフォルトのパーサーを使用しています。