在Freemarker中处理CDATA转义的XML

时间:2012-03-08 09:01:01

标签: xml freemarker cdata

我在我的项目中使用Freemarker从一个XML文档转换到另一个XML文档。 由于设计糟糕或选择规范的消息格式,我们的供应商选择在CDATA转义字段中嵌入一些XML,可能是因为他们选择的消息标准不能处理所有类型的扩展。无论出于何种原因,我现在需要深入研究这个领域并进行一些xpath查询。

说即:

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

任何人都知道如何获得价值&#34; a / b / text()&#34;在这种情况下?

我已经考虑过手动清理CDATA部分,然后将其解析为XML,但我希望Freemarker可以为我做这件事。

3 个答案:

答案 0 :(得分:1)

我认为您对重新分析XML的建议可能是您最好的选择。 CDATA表示应将其视为:字符数据。

答案 1 :(得分:1)

FreeMarker不解析XML,它只是调用通常的API来做到这一点,所以FreeMarker在这里无法提供帮助。您必须将XML文件加载到Stringchar[]或其他),删除那些CDATA“标记”,然后使用String将生成的javax.xml.parsers.DocumentBuilder解析为DOM树,并将其传递给FreeMarker。不过,您可能希望在此之前致电NodeMode.simplify(theDomTree)

答案 2 :(得分:0)

这篇文章有些陈旧,但为什么不将content:encoded标记与您的cdata一起使用?

<content:encoded><![CDATA[ ${ body } ]]> </content:encoded>