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

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

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

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

断点后,对比了从后台传过来的Jasperreports 的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"> 

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

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

AS3对于带命名空间的XML的解析操作上有很大的差异,例如以下来自Jasperreports的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);
目录
相关文章
|
1天前
|
存储 关系型数据库 Serverless
PolarDB产品使用问题之要获取并解析Binlog,该如何操作
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
1天前
|
监控 Java 开发者
Spring Boot 3 升级全解析:新特性与改进点一网打尽
Spring Boot 3 升级全解析:新特性与改进点一网打尽
19 0
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM解析器在浏览器中内置,将XML转换为JavaScript对象以便操作。通过XMLHttpRequest或ActiveXObject加载XML文档,如`books.xml`,然后使用`.responseXML`获取DOM。这允许遍历、修改XML节点。示例展示了如何使用AJAX加载XML。
|
1天前
|
Java BI Serverless
Java8 Stream深度解析:30个案例3万字助你精通集合筛选、归约、分组与聚合操作
Java8 Stream深度解析:30个案例3万字助你精通集合筛选、归约、分组与聚合操作
8 0
|
1天前
|
XML JavaScript Java
Java解析XML
Java解析XML
|
2天前
|
XML Java 数据格式
java解析xml文件内容
java解析xml文件内容
6 0
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
**XML DOM解析器将XML转换为JavaScript对象,允许在浏览器中操作XML。大多数浏览器内置此功能。
|
4天前
|
分布式计算 DataWorks 大数据
MaxCompute操作报错合集之pyodps3的报错信息里,报了程序的解析错误,是什么导致的
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
4天前
|
监控 关系型数据库 分布式数据库
PolarDB时间范围内PCU用量统计:深度解析与操作指南
了解PolarDB云原生数据库的PCU计费至关重要,1PCU相当于1核2GB资源。文章详述如何统计指定时间内PCU用量:登录控制台,查看集群监控,导出数据分析,或使用API接口获取信息。统计结果有助于分析数据库负载、优化资源使用和成本控制。通过对比不同时间段的PCU用量,用户可做出扩展或优化决策。未来,PolarDB有望提供更强大的统计工具。
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
**XML DOM解析器将XML转换为JavaScript对象,允许在浏览器中进行操作。浏览器通常内置XML解析器,如XMLHttpRequest用于加载XML文档到DOM。

热门文章

最新文章

推荐镜像

更多