У меня есть программа, которая должна анализировать XML, содержащий символьные объекты. Самой программе не нужно их разрешать, а их список велик и будет меняться, поэтому я хочу по возможности избегать явной поддержки этих сущностей.
Вот простой пример:
<?xml version="1.0" encoding="UTF-8"?>
<xml>Hello there &something;</xml>
Существует ли Java XML API, который может успешно анализировать документ без разрешения (нестандартных) символьных объектов? В идеале это должно было бы преобразовать их в специальное событие или объект, с которым можно было бы обращаться особым образом, но я бы согласился на вариант, который молча подавлял бы их.
Ответ и пример:
Скаффман дал мне ответ: используйте парсер StAX с IS_REPLACING_ENTITY_REFERENCES
, установленным в false.
Вот код, который я набросал, чтобы попробовать:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);
XMLEventReader reader = inputFactory.createXMLEventReader(
new FileInputStream("your file here"));
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isEntityReference()) {
EntityReference ref = (EntityReference) event;
System.out.println("Entity Reference: " + ref.getName());
}
}
Для приведенного выше XML будет напечатано «Entity Reference: something
».