Я анализирую (много) XML-файлов, которые содержат ссылки на сущности, которые я не знаю заранее (не могу изменить этот факт).
Например:
xml = "<tag>I'm content with &funny; &entity; &references;.</tag>"
когда я пытаюсь разобрать это, используя следующий код:
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
final DocumentBuilder db = dbf.newDocumentBuilder();
final InputSource is = new InputSource(new StringReader(xml));
final Document d = db.parse(is);
я получаю следующее исключение:
org.xml.sax.SAXParseException: The entity "funny" was referenced, but not declared.
но я хочу, чтобы парсер заменял каждую сущность, которая не объявлена (неизвестна парсеру), пустой строкой ''.
Или даже лучше, есть ли способ передать карту в парсер, например:
Map<String,String> entityMapping = ...
entityMapping.put("funny","very");
entityMapping.put("entity","important");
entityMapping.put("references","stuff");
чтобы я мог сделать следующее:
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
final DocumentBuilder db = dbf.newDocumentBuilder();
final InputSource is = new InputSource(new StringReader(xml));
db.setEntityResolver(entityMapping);
final Document d = db.parse(is);
если бы я получил текст из документа, используя этот пример кода, я должен получить:
I'm content with very important stuff.
Есть предложения? Конечно, я уже был бы рад просто заменить неизвестную сущность пустыми строками.
Спасибо