FreeMarker XML属性存在导致未定义

时间:2012-07-11 17:00:48

标签: xml undefined freemarker

所以我刚开始尝试使用FreeMarker,我遇到了这个问题。

当我使用提供的XML文件的在线教程时,写一些类似

的内容
${doc.book.chapter.para[0]}

我得到了预期的输出。

但是,当我尝试使用自己的XML文档时,我得到一个错误表达式....未定义。

我想我已经知道这是因为我的XML有属性而教程没有。

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

${doc.MyElement[0]}  

我收到未定义的错误

但是,如果我从XML文档中删除属性,并键入相同的东西

${doc.MyElement[0]}

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

我显然希望并理解第二个错误,但为什么只是通过删除属性来改变?当然这些应该被忽略?

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

谢谢,

罗勒

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

“book type = fiction”,而不仅仅是“book”

1 个答案:

答案 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命名空间。