Freemarker模板模拟xs:行为副本

时间:2014-08-19 22:58:33

标签: xml freemarker

我正在从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节点上运行,还是始终必须是节点值?可能是因为我的模板不包含名称空间?我如何引用名称空间?

1 个答案:

答案 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