Да, после долгих поисков и тестов я наконец-то сделал нечто похожее на это: я создал Reader (расширение java.io.BufferedReader), который на лету заменял символы '&' из сущностей XML другим символом, а затем постобработали проанализированный документ, заменив эти символы обратно амперсандами. Это не выглядит чистым, потому что это не так ;-), но это работает.

тоящее время я анализирую документы XHTML с помощью синтаксического анализатора DOM, например:

final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);

final DocumentBuilder db = dbf.newDocumentBuilder();
db.setEntityResolver(MY_ENTITY_RESOLVER);
db.setErrorHandler(MY_ERROR_HANDLER);
...
final Document doc = db.parse(inputSource);

И моя проблема в том, что когда мой документ содержит ссылку на сущность, например:

<p>&euro;</p>

Мой парсер создает узел Text для этого содержимого, содержащий «€» вместо «& euro;». Это означает, что она разрешает сущность так, как она должна это делать (XHTML 1.0 Strict DTD ссылается на ENTITIES Latin1 DTD, что, в свою очередь, устанавливает эквивалентность "& euro;" с "€").

Проблема в том, что я не хочу, чтобы парсер делал такие вещи.Я хотел бы оставить "& евро;" текст без изменений.

Я уже пробовал с:

final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Но:

Мне не нравится это, потому что я боюсь, что это может сделать некоторые реализации парсера непроводить от XHTML 1.0 Strict DTD к ENTITIES Latin1 DTD и, следовательно, не учитывает "& euro;" какобъявленный организация.

Когда я делаю это, он странным образом создает два узла: узел сущности "фунт" и узел текста с символом "€" после него.

Есть идеи? Можно ли настроить это в DOM Parser, не прибегая кпредварительная обработка XHTML и заменяя все символы «&» чем-то другим? ...

Решения могут быть как для парсера DOM, так и для SAX, я не возражаю против использования SAX-парсинга, а затем создаю свой DOM с помощью преобразования ...

Кроме того, я не могу переключиться на нестандартный XML-разбор библиотеки. Нет jdom, нет jsoup, нет HtmlCleaner и т. Д.

Большое спасибо.

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

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