используйте EntityResolver, который привел бы к «нулевому» DTD - который определил расширение «wiki» как «& wiki;». Кажется, должен быть лучший способ!

у Java-приложение для постобработки XML-файлов. Эти xml-файлы взяты из RDF-экспорта Semantic Mediawiki, поэтому они имеют синтаксис rdf / xml.

Моя проблема заключается в следующем: когда я читаю xml-файл, все сущности в файле преобразуются в их значение, указанное в Doctype. Например в Doctype у меня есть

<!DOCTYPE rdf:RDF[
<!ENTITY wiki 'http://example.org/smartgrid/index.php/Special:URIResolver/'>
..
]>

и в корневом элементе

<rdf:RDF
xmlns:wiki="&wiki;"
..
>

Это означает

<swivt:Subject rdf:about="&wiki;Main_Page">

становится

<swivt:Subject rdf:about="http://example.org/smartgrid/index.php/Special:URIResolver/Main_Page">

Я пытался использовать JDOM и стандартную Java DOM. Код, который я думаю, уместен здесь для стандартного DOM:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setExpandEntityReferences(false);
        factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

и для JDOM

SAXBuilder builder = new SAXBuilder();
    builder.setExpandEntities(false); //Retain Entities
    builder.setValidation(false);
    builder.setFeature("http://xml.org/sax/features/resolve-dtd-uris", false);

Но сущности разрешаются во всем XML-документе, тем не менее. Я что-то пропустил? Часы поиска привели меня только к командам «ExpandEntities», но, похоже, они не работают.

Любая подсказка высоко ценится :)

Ответы на вопрос(3)

Ваш ответ на вопрос