天天看點

由“Jasperreports 4.1.2更新到5.1.2對flex項目的解析”到AS3 帶命名空間的XML的操作

項目中,對jasperreports-4.1.2核心包進行了更新,發現,前端flex無法對jasperreports的格式進行解析了~

ireport 4.1 設計的模版可以解析,而ireport 4.6 設計的模版就不行了~

斷點後,對比了從背景傳過來的jasperreports 的xml資料,發現存在差異

4.1.2包生成的xml資料jasperprint标簽為:

5.1.2包生成的xml資料jasperprint标簽為:

後期版本的jasperreports核心包多生成了命名空間

而之前官方提供jasperreports 的flex解析包net.sf.jasperreports.flex (來自jasperreports的項目示例jasperreports-flash-4.0.0-project.zip)任然停留在2010年的版本未更新(估計jasperreports放棄了對flash的支援),導緻無法對新版本的xml資料進行解析

as3對于帶命名空間的xml的解析操作上有很大的差異,例如以下來自jasperreports的reportfactory.as

由于新版本多了命名空間,是以 直接xml.property 是無法擷取到property的。要帶上命名空間

由于 涉及到多個 命名空間,這種方式在該項目中不合适,且要修改後續的其他操作。

最簡單的方式,就是 幹掉命名空間,這樣後續操作不變。

這個就涉及到xml的操作了。查xml api發現了removenamespace(ns:namespace):xml方法,以為輕松搞定,實驗後 ,發現 不行。預設的命名空間(如 xmlns=”http://jasperreports.sourceforge.net/jasperreports/print”)無法删除。

用xml.children()方法取他孩子,發現,每個孩子也帶上了命名空間。

最後用上了正規表達式。限定類型的命名表達式可以删除了。而且用了兩次。汗。。

繼續閱讀