В частности, я использовал dom4j для чтения документов KML и анализа некоторых данных в XML. Когда я просто передаю URL-адрес в виде строки читателю, это так просто и обрабатывает как URL-адреса файловой системы, так и веб-URL-адреса:
SAXReader reader = new SAXReader();
Document document = reader.read(url);
Проблема в том, что иногда мой код должен обрабатывать документы KMZ, которые в основном представляют собой просто заархивированные документы XML (KML). К сожалению, нет удобного способа справиться с этим с помощью SAXReader. Я нашел всевозможные причудливые решения для определения того, является ли тот или иной файл ZIP-файлом, но мой код быстро становится раздутым и неприятным — чтение потока, создание файла, проверка «магических» шестнадцатеричных байтов в начале, извлечение и др.
Есть ли какой-нибудь быстрый и чистый способ справиться с этим? Более простой способ подключиться к любому URL-адресу и извлечь содержимое, если оно сжато, иначе просто взять XML?