Я хотел бы удалить определенные теги из документа XML как часть процесса фильтрации, но я не могу иначе изменить внешний вид или структуру 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>
регулярные выражения действительно лучший вариант в этой ситуации ?
Я посмотрю на XSLT, но сохранит структуру входного XML. Примеры, которые я дал, были хорошо отформатированы, но представьте, что образец XML был в одной строке. Будет ли вывод также на одной линии? –
@Alex Spurling: Этот * должен * быть абсолютно неактуальным, XML - это данные, а не формат сериализации. Почему это важно для вас? – Tomalak
Потому что он использует инструменты, отличные от XML. –