原文同步至:http://www.waylau.com/from-jasperrpeorts-4-1-2-upgraded-to-5-1-2-parsing-of-flex-projects-to-the-as3-namespace-xml-operation/

项目中,对Jasperrpeorts-4.1.2核心包进行了升级,发现,前端flex无法对Jasperrpeorts的格式进行解析了~

iReport 4.1 设计的模版可以解析,而iReport 4.6 设计的模版就不行了~

断点后,对比了从后台传过来的Jasperrpeorts 的xml数据,发现存在差异

4.1.2包生成的xml数据jasperPrint标签为:

<jasperPrint name="report13" pageWidth="842" pageHeight="842" topMargin="0" leftMargin="0" bottomMargin="0" rightMargin="0" locale="zh_CN" timezone="Asia/Shanghai">

5.1.2包生成的xml数据jasperPrint标签为:

<jasperPrint xmlns="http://jasperreports.sourceforge.net/jasperreports/print"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/print

http://jasperreports.sourceforge.net/xsd/jasperprint.xsd" name="report13"

pageWidth="842" pageHeight="842" topMargin="0" leftMargin="0" bottomMargin="0"

rightMargin="0" locale="zh_CN" timezone="Asia/Shanghai">

后期版本的Jasperrpeorts核心包多生成了命名空间

而之前官方提供Jasperrpeorts 的flex解析包net.sf.jasperreports.flex (来自Jasperrpeorts的项目示例jasperreports-flash-4.0.0-project.zip)任然停留在2010年的版本未更新(估计Jasperrpeorts放弃了对flash的支持),导致无法对新版本的xml数据进行解析

AS3对于带命名空间的XML的解析操作上有很大的差异,例如以下来自Jasperrpeorts的ReportFactory.as

 var props:XMLList = xml.property;
for each (var prop:XML in props)
{
if (prop.@name == "net.sf.jasperreports.export.xml.start.page.index")
{
report.startPageIndex = int(prop.@value);
}
if (prop.@name == "net.sf.jasperreports.export.xml.end.page.index")
{
report.endPageIndex = int(prop.@value);
}
if (prop.@name == "net.sf.jasperreports.export.xml.page.count")
{
report.pageCount = int(prop.@value);
}
}

由于新版本多了命名空间,所以 直接xml.property 是无法获取到property的。要带上命名空间

var ns:Namespace = new Namespace("http://jasperreports.sourceforge.net/jasperreports/print");
trace(xml.ns::property); //输出带名字空间的XML

由于 涉及到多个 命名空间,这种方式在该项目中不合适,且要修改后续的其他操作。

最简单的方式,就是 干掉命名空间,这样后续操作不变。

这个就涉及到XML的操作了。查XML api发现了removeNamespace(ns:Namespace):XML方法,以为轻松搞定,实验后 ,发现 不行。默认的命名空间(如 xmlns="http://jasperreports.sourceforge.net/jasperreports/print")无法删除。

用xml.children()方法取他孩子,发现,每个孩子也带上了命名空间。

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

           var str:String = oldxml.toString();

           var str2:String = str.replace(/xmlns(.*?)="(.*?)"/gm, "").replace(/xsi(.*?)="(.*?)"/gm, "");

            xml = new XML(str2);

暂时搞定~

由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作的更多相关文章

  1. cocos2d-x升级到3.4与创建android项目

    cocos2d-x升级到3.4与创建android项目 1 升级安装cocos2d-x windows7 64位机器, 到官网下载cocos2d-x-3.4: http://www.cocos2d-x ...

  2. 升级ionic版本后,创建新项目报Error Initializing app错误解决

    命令行,进入项目路径后,运行 ionic start myApp --v2 命令执行后,报如下错误 Installing npm packages...Error with start undefin ...

  3. 升级.net core 3.x 后mvc项目调试状态编辑view代码不能实时预览

    https://stackoverflow.com/a/58126955 简单来说 需要在nuget上安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilati ...

  4. python自动更新pom文件

    前言 项目越来越多,版本管理越来越麻烦,在项目上我使用 maven version 来进行版本管理.主要还是在分布式项目中模块众多的场景中使用,毕竟各个模块对外的版本需要保持统一. 关于这个插件如何使 ...

  5. 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版

    背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...

  6. 从ASP.NET 升级到ASP.NET5(RC1) - 翻译

    前言 ASP.NET 5 是一次令人惊叹的对于ASP.NET的创新革命. 他将构建目标瞄准了 .NET Core CLR, 同时ASP.NET又是对于云服务进行优化,并且是跨平台的框架.很多文章已经称 ...

  7. GreenDao2.2升级GreenDao3.0的适配之路

    前言.为什么要升级到Greendao3.0? 1. 多人开发 以往的数据库建表建Dao等操作要新开一个module,在统一的地方管理数据库建表,现在可以直接写Entity.多人开发时自己管自己的Ent ...

  8. 【转】微软教学:三种方法屏蔽Win7/Win8.1升级Win10推送

    原文地址:http://www.ithome.com/html/win10/199961.htm 微软在2015年6月就开启了Win10升级推送工作,主要是靠<获取Windows10>工具 ...

  9. ubuntu下升级R版本

    ubuntu下升级R版本   在测试<机器学习 实用案例解析>一书的邮件分类代码时,windows系统下rstudio中无法读取特殊字符,在ubuntu下可以.在ubuntu虚拟机下安装t ...

随机推荐

  1. CodeForces 446B DZY Loves Modification

    题意: k次操作  每次选择一行或一列  得到所选数字的和  并将所选数字同一时候减去p  问最多得到多少 思路: 重点在消除行列间的相互影响 因为每选一行全部列所相应的和都会-p  那么假设选了i次 ...

  2. nginx+memcached+ftp上传图片+iis

    nginx+memcached+ftp上传图片+iis 自毕业以来,一直在现在公司做订餐系统的开发,那会儿没有口碑,没有饿了么,更别说美团外卖,百度外卖了...因为规模都比较小,都是一个服务器包含数据 ...

  3. Qt for Android 部署流程分析

    原地址:http://blog.csdn.net/foruok/article/details/17796017 今天为了测试使用 Qt Creator 3.0.0 开发的纯 C 工程,利用了 Win ...

  4. PHP开发经验中介(thinkphp3.2使用技巧)

    1.在模板中截取字符串 {$vo.create_date|mb_substr=###,0,10,'utf-8'}

  5. httpClient中的三种超时设置小结

    httpClient中的三种超时设置小结   本文章给大家介绍一下关于Java中httpClient中的三种超时设置小结,希望此教程能给各位朋友带来帮助. ConnectTimeoutExceptio ...

  6. 基于Greenplum Hadoop分布式平台的大数据解决方案及商业应用案例剖析

    随着云计算.大数据迅速发展,亟需用hadoop解决大数据量高并发访问的瓶颈.谷歌.淘宝.百度.京东等底层都应用hadoop.越来越多的企 业急需引入hadoop技术人才.由于掌握Hadoop技术的开发 ...

  7. linux编程掌握常用命令

    1)编译应用程序 make -f makefile_5_2 clean make -f makefile_5_2 2)关于共享目录 在linux虚拟机的/mnt/hgfs下可看到该文件夹 3)cd命令 ...

  8. PreTranslateMessage和TranslateMessage区别

    PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码. ...

  9. Android switch 中 case expressions must be constant expressions 错误

    刚才导入android zxing 条码 的demo测试,发现出现如下错误 case expressions must be constant expressions 经检查,项目被设置成librar ...

  10. java大牛list

    1 Java的未来 Java能干什么.不能干什么,一开始就要搞清楚.这对于成为一个纯种的Java程序猿至关重要. 2 构建Java运行环境 Java运行在服务器,服务器都是Linux系统,对于真正程序 ...