所以我刚开始尝试使用FreeMarker,我遇到了这个问题。
当我使用提供的XML文件的在线教程时,写一些类似
的内容${doc.book.chapter.para[0]}
我得到了预期的输出。
但是,当我尝试使用自己的XML文档时,我得到一个错误表达式....未定义。
我想我已经知道这是因为我的XML有属性而教程没有。
我得出了这个结论,因为如果我输入
${doc.MyElement[0]}
我收到未定义的错误
但是,如果我从XML文档中删除属性,并键入相同的东西
${doc.MyElement[0]}
我得到了一个不同的错误,与有孩子的MyElement有关。
我显然希望并理解第二个错误,但为什么只是通过删除属性来改变?当然这些应该被忽略?
还有其他人有这个问题吗?解决方案是什么?
谢谢,
罗勒
PS。只是为了检查我的术语是否正确,当我说属性时,我的意思是
“book type = fiction”,而不仅仅是“book”
答案 0 :(得分: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命名空间。