我在我的项目中使用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可以为我做这件事。
答案 0 :(得分:1)
我认为您对重新分析XML的建议可能是您最好的选择。 CDATA表示应将其视为:字符数据。
答案 1 :(得分:1)
FreeMarker不解析XML,它只是调用通常的API来做到这一点,所以FreeMarker在这里无法提供帮助。您必须将XML文件加载到String
(char[]
或其他),删除那些CDATA“标记”,然后使用String
将生成的javax.xml.parsers.DocumentBuilder
解析为DOM树,并将其传递给FreeMarker。不过,您可能希望在此之前致电NodeMode.simplify(theDomTree)
。
答案 2 :(得分:0)
这篇文章有些陈旧,但为什么不将content:encoded标记与您的cdata一起使用?
<content:encoded><![CDATA[ ${ body } ]]> </content:encoded>