我正在从XML内容创建数据模型,并尝试使用write一个模板从数据模型中选择一个节点(包含子节点)。
final Map<String, NodeModel> root = new HashMap<String, NodeModel>();
root.put("doc", freemarker.ext.dom.NodeModel.parse(new InputSource(new StringReader(response))));
响应是:
<ns:Response xmlns:ns="urn:sdf.sdf.as.v1">
<ns:MessageBody>
<ns:Items>
<ns:Item>
<ns:ItemId>1</ns:ItemId>
</Item>
<ns:Item>
<ns:ItemId>2</ns:ItemId>
</Item>
</ns:Items>
</ns:MessageBody>
</ns:Response>
我想要的模板是: $ {} doc.Response.MessageBody.Items
我得到以下异常:
在这里期待字符串,日期或数字,表达式 doc.Response.MessageBody.Items是一个 freemarker.ext.dom.NodeListModel
我做错了什么? Freemarker模板可以在Element节点上运行,还是始终必须是节点值?可能是因为我的模板不包含名称空间?我如何引用名称空间?
答案 0 :(得分:0)
您需要使用doc.Response.MessageBody.Items.@@markup
(请参阅:http://freemarker.org/docs/xgui_imperative_formal.html)
是的,您必须在模板中声明XML名称空间,否则您将拥有0个匹配的节点。请参阅&#34;使用XML命名空间&#34;在这里:http://freemarker.org/docs/xgui_imperative_learn.html#autoid_73