Я использую Python для манипулирования файлом XML, полученным из другой системы. Эта система производит недопустимый XML. В основном, это не исключает некоторые из & в XML.
Так, например, у меня есть такие строки:
<IceCream>Ben&Jerry</IceCream>
Конечно, когда анализируется с SAX или DOM, он выдает неверную ошибку токена.
Для более общего понимания - это очень большой файл (2 МБ), довольно плоский и содержит много данных в CDATA.
Что я пробовал:
- Запись Regex для замены только неиспользованных &, без повторного освобождения & gt; и такие:
&(?!\w{2,4};)
. Это исправило это, но оно избежало амперсандов в CDATA, что затем вызвало ошибки в системе назначения. Я не могу потом удалить все, что находится в CDATA, потому что некоторые из них должны оставаться в стороне.
- Использование Прекрасного (Каменного) супа . Тоже не повезло. Вместо того, чтобы избегать свободных амперсандов, он создал сущность (то есть
&Jerry;
). Не хорошо.
Следующим шагом будет создание моего собственного анализатора с использованием конечного автомата. Спаси меня от перехода по этой дороге.
Это не сложная структура (очень плоская, максимум 4 слоя), поэтому, возможно, регулярное выражение сможет отследить области, не входящие в CDATA.
Большое спасибо.