天天看点

由“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()方法取他孩子,发现,每个孩子也带上了命名空间。

最后用上了正则表达式。限定类型的命名表达式可以删除了。而且用了两次。汗。。

继续阅读