Раньше я использовал Apache Digester и любил поиск по тегам XML на основе веток.
Указание тега как
ч \ а \ Ь \
очень интуитивно понятен.
Теперь я хочу сделать проект фильтрации XML, но Apache Digester не похоже, что он будет работать, просто потому, что нет способа добраться до базовых тегов XML. Как часто задаваемые вопросы говорят:
Как получить XML-код, вложенный в тег в виде литеральной строки?
Часто задают вопрос, каким образом некоторые XML (особенно XHTML), вложенные в документ, могут быть извлечены в виде строки, например, чтобы извлечь содержимое тега "body" ниже в виде строки:
... некоторый XML-код ...
Если вы можете изменить вышеприведенное, чтобы обернуть желаемый текст в раздел CDATA, все будет просто; Digester просто обработает этот блок CDATA как одну строку:
... некоторый XML-код ...
Если это невозможно, вам нужно использовать NodeCreateRule для создания узла DOM, представляющего тег body и его потомков, а затем сериализовать этот узел DOM обратно в текст.
Помните, что Digester - это просто слой поверх стандартного синтаксического анализатора XML, и стандартные синтаксические анализаторы XML не имеют возможности просто прекратить анализ ввода для определенного элемента - если только он не знает, что содержимое этого элемента является блоком символов ( CDATA).
Если было что-то, что использует ту же систему шаблонов, которую я могу использовать для фильтрации XML? Моя идея состоит в том, чтобы использовать шаблоны, заданные пользователем, заносить их в черный список и копировать все остальное.
Или, может быть, есть способ найти местоположение совпадения в Apache Digester (местоположение в xml, а не только отображаемый текст). Этого было бы достаточно для меня, чтобы скопировать другой текст, сохранив его копию и пропуская совпадения.
Edit: с тех пор я узнал, что XPath выглядит почти нормально для этого, но все приложения, которые я нашел, были для выбора чего-то, а не удаления. У вас есть пример для этого?