Обработка сброшенного CDATA XML во Freemarker - PullRequest
1 голос
/ 08 марта 2012

Я использую Freemarker в своем проекте для преобразования из одного XML-документа в другой. Из-за дурацкого дизайна или выбора канонического формата сообщений наш поставщик решил внедрить некоторый XML в экранированные поля CDATA, вероятно, поскольку выбранный ими стандарт сообщений не поддерживает все типы расширений. По какой-то причине мне сейчас нужно покопаться в этом поле и выполнить несколько запросов xpath.

Скажите, т.е.:

<Invoice>
  ..
  <Note><![CDATA[<?xml version="1.0" encoding="utf-8"?><a><b>Value</b></a>]]></Note>
</Invoice>

У кого-нибудь есть идея, как получить значение "a / b / text ()" в сценарии такого рода?

Я думал о том, чтобы попытаться очистить раздел CDATA вручную, а затем проанализировать его как XML, но я надеюсь, что Freemarker сможет сделать это для меня.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

FreeMarker не анализирует XML, он просто вызывает обычные API для этого, поэтому FreeMarker здесь не может помочь.Вам нужно будет загрузить XML-файл в String (char[] или что-то еще), удалить эти «теги» CDATA, затем проанализировать результирующее String в DOM-дереве с помощью javax.xml.parsers.DocumentBuilder и передать его во FreeMarker.Вы, вероятно, захотите позвонить NodeMode.simplify(theDomTree) до этого, однако.

1 голос
/ 08 марта 2012

Я думаю, что ваше предложение о повторном анализе XML может быть вашим лучшим выбором. CDATA означает, что его следует рассматривать как таковой: символьные данные.

...