Вы можете сохранить узлы EntityReference в документе, используя синтаксический анализатор DOM LS с параметром "entity", установленным в значение true.http://docs.oracle.com/javase/6/docs/api/org/w3c/dom/DOMConfiguration.html
В спецификации сказано, что по умолчанию установлено значение true, но в зависимости от синтаксического анализатора это может быть false, учтите это.
Для загрузки Xerces:
DOMImplementationLS domImpl = new org.apache.xerces.dom.CoreDOMImplementationImpl();
Вы также можете использовать реестр, как показано ниже, но лично, я бы предпочел жестко запрограммировать нужную реализацию, как указано выше:
DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
DOMImplementationLS domImpl = (DOMImplementationLS) registry.getDOMImplementation("XML 3.0 LS 3.0");
Затем, чтобы загрузить документ:
// XML parser with XSD schema
LSParser parser = domImpl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, "http://www.w3.org/2001/XMLSchema");
DOMConfiguration config = parser.getDomConfig();
config.setParameter("entities", true);
LSInput input = impl.createLSInput();
Document lDoc = parser.parse(your XML stream);
Затем,ваши сущности XML не раскрываются в DOM.
Тогда, поскольку SAXON не обрабатывает сущности, не развернутые (ошибка «Неподдерживаемый тип узла в DOM! 5»), вы не можете использовать net.sf.saxon.xpath.XPathFactoryImpl
, вы должны установить XPathFactory по умолчанию для Xerces с XPathFactory.newInstance()