2012-07-11 106 views
0

所以我刚开始尝试使用FreeMarker,并且遇到了这个问题。FreeMarker XML属性目前导致undefined

当我使用在线教程与提供的XML文件,并写入类似

${doc.book.chapter.para[0]} 

我得到预期的输出。

但是,当我尝试使用自己的XML文档时,我得到一个错误Expression .... is undefined。

我想我已经发现,这是因为我的XML有属性,而教程没有。

我得出这个结论,因为如果我键入

${doc.MyElement[0]} 

我得到的未定义错误

但是,如果我删除从XML文档的属性,并键入同样的事情

${doc.MyElement[0]} 

我得到一个不同的错误,与MyElement有孩子。

我明显地期待并理解第二个错误,但为什么它只是通过删除属性而改变?当然,这些应该被忽略?

有没有其他人有这个问题?什么是解决方案?

感谢,

罗勒

PS。只是为了检查我的术语正确的,当我说属性,我的意思是

“书型=小说”,而不是仅仅是“书”

+0

属性的存在确实无关紧要。如果您复制粘贴一个简单的示例与确切的模板和XML,以便我可以重现错误,我当然可以告诉问题是什么。 – ddekany 2012-07-11 17:59:57

+0

配置cfg = new Configuration(); cfg.setObjectWrapper(new DefaultObjectWrapper()); \t \t Template tem = cfg.getTemplate(“FMT.ftl”); \t \t \t \t Map root = new HashMap(); \t \t root.put(“doc”,NodeModel.parse(new File(“inputdata。XML“))); \t \t StringWriter的作家=新的StringWriter(); tem.process(根,作家); \t \t 的System.out.println(writer.toString()); – 2012-07-12 08:33:44

+0

和我的XML看起来例如: – 2012-07-12 08:35:21

回答

0

从给予的例子中,差异的原因是添加/删除xmlns属性,它在XML中有特殊的含义。对于doc.Data查询以匹配Data元素,元素名称和XML名称空间必须匹配。如果没有使用XML名称空间,则doc.Data将匹配Data元素。但是,如果将XML中的元素放入XML名称空间中,doc.Data将匹配0个元素(因为您没有在FreeMarker中设置默认名称空间),所以doc.Data是0长度序列,因此[0]不存在。有关更多信息,请参阅http://freemarker.org/docs/xgui_imperative_learn.html上的XML名称空间。

+0

谢谢,现在我明白了我的问题,如何解决它:) – 2012-07-12 10:58:24