首页 > 编程语言 >由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作

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

时间:2023-06-04 12:02:55浏览次数:60  
标签:AS3 5.1 4.1 xml jasperreports prop XML net Jasperrpeorts


项目中,对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);


 

暂时搞定~

标签:AS3,5.1,4.1,xml,jasperreports,prop,XML,net,Jasperrpeorts
From: https://blog.51cto.com/u_9427273/6410328

相关文章

  • Flex/AS3/flash player支持屏蔽右键菜单,自定义菜单,并设置相应的菜单事件(示例,图解)..
    播放器版本11.2以后支持右键菜单屏蔽及自定义菜单1.更新播放器,11.2以上版本http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_3.swchttp://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_4.swchttp://download.macro......
  • 5.19 面向对象案例分析一
    classAddress{privateStringcountry;privateStringprovince;privateStringcity;privateStringstreet;privateStringzipcode;publicAddress(){}publicAddress(Stringcountry,Stringprovince,Stringcity,Stringstr......
  • 2014.4.25.12.51_context_2014.4.25_Android种的Context详解
    Android中Context详解----你所不知道的Context一、Context相关类的继承关系2二、什么时候创建Context实例5从上可知一下三点,即:1、它描述的是一个应用程序环境的信息,即上下文。2、该类是一个抽象(abstractclass)类,Android提供了该抽象类的具体实现类(后面我们会讲到是Co......
  • 2014.4.19.12.27_switch_8.28_java switch语句使用注意的四大细节_0.01
    javaswitch语句使用注意的四大细节很多朋友在使用javaswitch语句时,可能没有注意到一些细节,本文将详细介绍使用javaswitch语句四大要点,需要的朋友可以参考下。switch语句的格式如下:(它的功能是选出一段代码执行)switch(整数选择因子){case整数值1:语句;break;case整数值......
  • 2015.4.24.17.36_pencil_2015.4.24_Pencil教程=自定义组件安装_0.01
    在前面《原型工具Pencil使用介绍》中有说到Pencil支持自定义组件安装,也简易的介绍了安装使用方法,这里再详细的介绍一下如何安装自定义组件。在最新版本的Pencil1.3中,自带的组件库是比较少的,只有三个,但在Pencil1.2版本中自带的组件库有七个,而且1.3个人感觉只是界面布局上的更新,操......
  • 2015.4.24.17.23_界面_2015.4.24__Android界面设计工具_0.01
    iOS,Android原型图设计软件–>AxureRP,UIDesigner,Pencil,iPhoneMockup,Justinmind<–#AxureRPAxureRP-快速原型制作软件–线框图,原型,规格文档,由美国AxureSoftwareSolutions,Inc.公司开发。AxureRP也分商业版和免费版,英文官方:http://www.axure.com/download中文网站:h......
  • CleanMyMacX 4.13.4软件怎么样?CleanMyMac X好用吗?2023亲测效果功能讲解
    本文参考:https://blog.csdn.net/weixin_55412152/article/details/131012653CleanMyMacX4.13.4苹果电脑专业清理软件,CleanMyMacX好用吗?当然好用了。以下就来介绍一下它的优点和殊荣。可以帮助用户简单高效获取Mac实时健康、压力、温度和资源占用情况等重要关键信息,并对用户提......
  • win 10 Qt5.15.2安装
    Qt简介截止今天,Qt长期支持的版本只有Qt5.15、Qt6.2和Qt6.5。在Qt6.5版本,在新版本中有许多类被聚合,有些函数发生改变。当然6.5也更强大了,有了更丰富的接口和函数,让使用者能更加便利和快速的开发。但是我今天所讲述的并不是Qt6.5,而是Qt5.15.2的安装。Qt安装Qt已经放......
  • 5.17 构造代码块
    classPerson{publicPerson(){System.out.println("[构造方法]Person类构造方法执行");}{//构造块会先于构造方法执行;并且每次实例化新对象的时候,都会调用构造块中的代码;System.out.println("[构造块]Person构造块执行!");}}pub......
  • 5.16 普通代码块
    publicclassHelloWorld{publicstaticvoidmain(String[]args){//可以在一个方法中进行一些结构拆分,以防止相同变量名称所带来的相互影响!{//普通代码块intx=10;//局部变量System.out.println("x="+x);......