Я преобразовываю xml с помощью процессора Saxon XSLT2 (используя Java + Saxon S9API) и имею дело с xml-документами в качестве источника, которые содержат недопустимые символы в качестве имен тегов и поэтому не могут быть проанализированы конструктором документов.
Пример:
<A>
<B />
<C>
<D />
</C>
<E!_RANDOM_ />
< />
</A>
Код:
import net.sf.saxon.s9api.*;
[...]
/* XSLT Processor & Compiler */
proc = new Processor(false);
/* build document from input*/
XdmNode source = proc.newDocumentBuilder().build(new StreamSource(input));
Ошибка:
Error on line X column Y
SXXP0003: Error reported by XML parser: Element type
"E" must be followed by either attribute specifications, ">" or "/>".
восклицательный знак и имя тега, состоящее из пробела, в настоящее время являются моими единственными недействительными тегами. Я ищу более надежное решение, а не просто удаляю целые строки (отформатированного) xml.
С некоторым изумлением я мог бы придумать регулярное выражение для идентификации недопустимых строк, но у меня возникли бы проблемы с удалением узлов, содержащих атрибуты и дочерние узлы.
Спасибо за помощь!