0

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

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

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

我得到了预期的输出。

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

我想我已经弄清楚这是因为我的 XML 有属性,而教程没有。

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

${doc.MyElement[0]}  

我得到未定义的错误

但是,如果我从 XML 文档中删除 Attribute 并键入相同的内容

${doc.MyElement[0]}

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

我显然预料到并理解了第二个错误,但为什么它只是通过删除属性而改变呢?当然这些应该被忽略吗?

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

谢谢,

罗勒

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

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

4

1 回答 1

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

于 2012-07-12T09:55:40.303 回答