2012-07-11 103 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