2014-08-19 2 views
0

Я создаю модель данных из XML-содержимого и пытаюсь использовать шаблон записи, который выбирает узел (содержащий дочерние узлы) из модели данных.Freemarker template simulation xs: copy-of behavior

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}

я получаю следующее исключение:

Ожидая строку, дату или номер здесь, Ex Pression doc.Response.MessageBody.Items вместо этого является freemarker.ext.dom.NodeListModel

Что я делаю неправильно? Может ли шаблон Freemarker работать на узле Element или он всегда должен быть значением узла? Может быть, потому, что мой шаблон не содержит пространства имен? Как мне ссылаться на пространства имен?

ответ

0

Вы должны использовать [email protected]@markup (см: http://freemarker.org/docs/xgui_imperative_formal.html)

И да, вам придется объявить XML пространства имен в шаблоне, иначе вы будете иметь 0 совпадающие узлы. См. «Использование пространств имен XML» здесь: http://freemarker.org/docs/xgui_imperative_learn.html#autoid_73

+0

В любом случае, чтобы выводить узлы без пространств имен. Когда я использую @@ разметку, я получаю последовательность полных элементов, таких как: content. Я просто хочу содержание. – IanG