Я бы хотел удалить некоторые теги из документа XML как часть процесса фильтрации, но я не могу иначе изменить внешний вид или структуру XML.
Входной XML входит в строку, например:
<?xml version="1.0" encoding="UTF-8"?>
<main>
<mytag myattr="123"/>
<mytag myattr="456"/>
</main>
и вывод должен удалить mytag
, где значение атрибута, скажем, 456:
<?xml version="1.0" encoding="UTF-8"?>
<main>
<mytag myattr="123"/>
</main>
Дифференциал должен показывать только удаленные теги как различия между входом и выходом .
Я рассмотрел SAX, StAX и JAXB, но не похоже, что можно вывести XML в том же формате, в котором он был введен с помощью любого из этих API. Вместо этого они сформируют хорошо структурированный XML с правильными отступами и пробелами, которые иногда будут показывать отличия от ввода.
В моем текущем методе используются регулярные выражения, но он не очень устойчив, поскольку не учитывает все возможные способы структурирования приведенного выше XML. Например, чтобы соответствовать значению атрибута:
myAttr\s*=\s*"([^"]*)"
Это работает в приведенном выше примере, но не будет работать с этим тегом XML:
<mytag myattr=
123></mytag>
Являются ли регулярные выражения действительно лучшим вариантом в этой ситуации?