CN101221556A - 一种xml文件解析的方法及装置 - Google Patents
一种xml文件解析的方法及装置 Download PDFInfo
- Publication number
- CN101221556A CN101221556A CNA2008100060670A CN200810006067A CN101221556A CN 101221556 A CN101221556 A CN 101221556A CN A2008100060670 A CNA2008100060670 A CN A2008100060670A CN 200810006067 A CN200810006067 A CN 200810006067A CN 101221556 A CN101221556 A CN 101221556A
- Authority
- CN
- China
- Prior art keywords
- script
- xml
- stack
- component object
- uri
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种XML文件解析的方法,包括:定义所述XML的标签与相应对象模型特征的映射,所述对象模型特征具有配置属性,所述配置属性用于标识执行所述对象模型特征的栈名;生成由所述XML标签编写的XML文件,所述XML文件包括装载任务对象脚本和组件对象脚本;提取所述组件对象脚本的URI,并依据所述URI在所述装载任务对象脚本和组件对象脚本之间建立关联;解析所述装载任务对象脚本,生成装载任务序列,所述装载任务序列包括URI;遍历所述装载任务序列,获得当前URI指定的组件对象脚本;解析所述组件对象脚本,返回相应栈名对应的栈顶组件对象。本发明能在节省***资源的前提下,简单、有效的实现XML文件配置及解析。
Description
技术领域
本发明涉及信息处理技术领域,特别是涉及一种XML文件解析的方法及一种XML文件解析的装置。
背景技术
XML(The Extensible Markup Language,可扩展标识语言)是一种独立于平台的编程语言,由于它提供了用于创建公共信息格式以及共享网络上不同软件应用的格式和数据的灵活机制,从而特别适于在诸如Internet的分布式网络上使用。XML来源于SGML,包括描述文件内容的标记符号(标签)。XML在标记符号使用方法上同HTML(超文本标记语言)相似,但与HTML相比,它至少具有两个基本区别。首先,HTML具有定义标记符号的专用集,而在XML中所允许标记符号是不受限和自定义的,从而XML是可扩展的。即,尽管XML也具有标准化标记符号,但XML程序员并不受定义标记符号标准集的限制,而是能够定义出新的标记符号。其次,由于HTML标签和属性仅定义出如何显示实际内容,使HTML受限,但XML标签和属性既能够定义如何显示信息(例如,通过Web浏览器),又能够定义显示什么样的内容。
XML是一种简单的数据存储语言,可以使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,XML的简单使其易于在任何应用程序中读写数据,比如,在使用计算机处理各种业务逻辑时,往往需要进行建模分析,然后根据模型生成业务模型描述。由于XML语言具有纯文本、以及强大的标签描述特性,在描述业务逻辑时采用XML语言,则可以更容易地在应用服务器上部署。
目前常用的XML解析方法是SAX和DOM,在此基础上产生许多开源解析框架,如Castor、JAXB、Digester等。这些框架都比较类似,都是将XML文件转换成相应的Java对象的过程,以下以Digester为例具体说明:简言之,Digester由″事件″驱动,通过调用预定义的规则操作对象栈,将XML文件转换为Java对象。工作原理如下:
Digester底层采用SAX解析XML文件,由于SAX解析器采用基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。所以相应地,对象转换由″事件″驱动,即在识别出特定XML元素时(实际被细分为begin、body、end、finish四个时点),将执行特定的动作,比如创建特定的Java对象,或调用特定对象的方法等。此处的XML元素根据匹配模式(matching pattern)识别,而相关操作由规则(rule)定义。在转换过程中,Digester维持了一个对象栈,用来存放转换中生成的、或是为转换临时创建的Java对象。对输入XML文件作了一趟完整的扫描后,对象栈的栈顶元素即为目标对象。由于Digester屏蔽了SAX解析的细节,使用者仅需关注转换操作本身,大大简化了转换操作。
在基本使用中,使用者通过调用Digester类的相关方法,来创建匹配模式与规则的映射序列。比如,调用addSetProperties(String pattern),向Digester中加入SetPropertiesRule。然而,在基本的使用方式下,Digester虽然使用XML文件定义Java对象的状态,提高了***的灵活性,但是匹配模式与规则的映射序列(装载逻辑)仍然通过硬编码来定义,这种方式不易修改与重用。所以Digester还提供了一种高级的使用方式,用一个XML文件定义Java对象的状态(数据源文件),用另一个XML文件定义装载数据源文件的装载逻辑。在这种情况下,对象的装载过程分成了两步:
1.装载逻辑的″装载″,其结果表现为定义了rule的Digester;
2.根据上一步得到的Digester,装载目标对象。
显然,采用这种方式,需要为一个装载逻辑多写一个配置文件,如果需要执行复杂业务逻辑的XML文件解析,将增加***开销,严重浪费***资源。并且,由于提供的规则标签所定义的动作简单,功能单一,不支持多栈操作,对于复杂的解析动作无法定义或定义比较繁琐困难。
所以,本领域技术人员迫切需要发展一种能在节省***资源的前提下,简单、有效的实现XML文件配置及解析的方法。
发明内容
本发明所要解决的技术问题是提供一种XML文件解析的方法,用以在节省***资源的前提下,简单、有效的实现XML文件配置及解析。
本发明还提供了一种XML文件解析的装置,用以保证上述方法在实际中的实现及应用。
为了解决上述问题,本发明公开了一种XML文件解析的方法,包括:
定义所述XML的标签与相应对象模型特征的映射,所述对象模型特征具有配置属性,所述配置属性用于标识执行所述对象模型特征的栈名;
生成由所述XML标签编写的XML文件,所述XML文件包括装载任务对象脚本和组件对象脚本;
提取所述组件对象脚本的URI,并依据所述URI在所述装载任务对象脚本和组件对象脚本之间建立关联;
解析所述装载任务对象脚本,生成装载任务序列,所述装载任务序列包括URI;
遍历所述装载任务序列,获得当前URI指定的组件对象脚本;
解析所述组件对象脚本,返回相应栈名对应的栈顶组件对象。
优选的,所述装载任务对象脚本包括装载对象配置文件和装载规则脚本,所述装载任务对象脚本的解析步骤进一步包括:
依据所述装载规则脚本生成第一SAX解析器;
由所述第一SAX解析器解析所述装载任务对象脚本。
优选的,所述组件对象脚本包括组件对象配置文件和组件规则脚本,所述组件对象脚本的解析步骤进一步包括:
依据所述组件规则脚本生成第二SAX解析器;
由所述第二SAX解析器解析所述组件对象脚本。
优选的,通过以下步骤返回栈顶组件对象:
依据所述栈名设置空栈;
将相应的组件对象压入当前栈中;
提取栈顶组件对象出栈。
优选的,所述定义步骤还包括:
将描述所述对象模型特征的元模型特征映射到相应的XML标签。
优选的,所述的方法还包括:
将描述所述元模型特征至所述XML标签的映射编码至所述SAX解析器中。
优选的,所述SAX解析器包括用于在所述XML文件与对象模型特征之间进行转换的可执行代码。
本发明实施例还公开了一种XML文件解析的装置,包括:
定义模块,用于定义所述XML的标签与相应对象模型特征的映射,所述对象模型特征具有配置属性,所述配置属性用于标识执行所述对象模型特征的栈名;
生成模块,用于生成由所述XML标签编写的XML文件,所述XML文件包括装载任务对象脚本和组件对象脚本;
关联模块,用于提取所述组件对象脚本的URI,并依据所述URI在所述装载任务对象脚本和组件对象脚本之间建立关联;
装载解析模块,用于解析所述装载任务对象脚本,生成装载任务序列,所述装载任务序列包括URI;
遍历模块,用于遍历所述装载任务序列,获得当前URI指定的组件对象脚本;
组件解析模块,用于解析所述组件对象脚本,返回相应栈名对应的栈顶组件对象。
优选的,所述装载任务对象脚本包括装载对象配置文件和装载规则脚本,所述装载解析模块进一步包括:
第一解析器产生子模块,用于依据所述装载规则脚本生成第一SAX解析器;
第一SAX解析器,用于解析所述装载任务对象脚本。
优选的,所述组件对象脚本包括组件对象配置文件和组件规则脚本,所述组件解析模块进一步包括:
第二解析器产生子模块,用于依据所述组件规则脚本生成第二SAX解析器;
第二SAX解析器,用于解析所述组件对象脚本。
优选的,组件解析模块进一步包括:
建栈子模块,用于依据所述栈名设置空栈;
压栈子模块,用于将相应的组件对象压入当前栈中;
出栈子模块,用于提取栈顶组件对象出栈。
优选的,所述定义模块还包括:
标签映射子模块,用于将描述所述对象模型特征的元模型特征映射到相应的XML标签。
优选的,所述的装置还包括:
编码模块,用于将描述所述元模型特征至所述XML标签的映射编码至所述SAX解析器中。
与现有技术相比,本发明具有以下优点:
首先,本发明通过开发新的规则动作模板以支持对命名栈的操作,在动作模板的基础上开发一组新的规则动作,相应地,对原有commons-digester的SAX解析器Digester进行扩展,支持对命名栈的操作,并且,定义与规则动作对应的规则标签,开发XML规则脚本DTD、规则对象工厂,扩展规则解析器以支持相应规则标签识别、从而触发规则对象工厂的调用,实现规则标签到规则动作对象的转化,从而使本发明可以适用各种XML标准报文格式,并且应用本发明的规则标签可以完成各种复杂的解析动作,大大简化了XML配置文件与XML规则脚本的开发和维护工作;
其次,本发明无需额外生成配置文件描述与创建对象对应的配置文件和规则脚本,有效节约了***资源;
再者,本发明通过遍历产生装载任务,能批量生成uri的装载,从而支持配量处理与组件即插即用;
最后,本发明对于服务提供商来说,技术实现简单,无技术障碍,无特殊保密算法,成本和风险较低。
附图说明
图1是本发明的一种XML文件解析方法实施例的流程图;
图2是本发明的一个具体例子中的栈操作过程示意图;
图3是本发明的一种XML文件解析装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明可用于众多通用或专用的计算***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、包括以上任何***或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
目前,使用XML处理复杂业务逻辑可以分为两种处理类型:
一种是传统的硬编码方式。即只使用XML描述业务逻辑的数据,由真正的业务处理代码解析这些数据,完成业务逻辑。这种方式只是把数据存放成XML格式,如果业务逻辑有什么变化,通常只能修改业务处理代码,一般情形下需要重新编译大量的代码,编译后的代码需要重新部署,灵活性差。而且随着业务逻辑的复杂化,则业务处理代码也越来越复杂、越来越庞大,代码的可维护性变差。
另一种是XML到应用语言的映射。由于XML是SGML的简化,因此它也属于元语言,可以由使用者自行定义,进而产生出完全符合使用者需求的应用语言。而且应用语言更能够处理各种更为复杂的逻辑。通过XML描述的复杂处理逻辑,可以通过XML解析器生成对应的应用语言。而且这种解析、编译、处理的过程可以做成一体,完成对XML语言的解释执行过程;此外,上述过程也可以分开,只部署解析后的应用语言或编译后的目标语言,提高处理的速度,带来很大的灵活性。
在实际中,由于XML的灵活性和可读性,XML通常用作对象模型的串行化机制。使用者能够定义XML标记符号以与某种类型的数据相对应,然后创建XML文件(也称为XML文档),可对XML文件进行转换,以提供与标签和属性相关联的内容。例如,如果想要建立描述某类产品的标准格式,以便能在不同平台的多个应用上共享该类产品的描述,可定义与该产品相对应的通用标签,例如,“SHIRT(衬衫)”,以及该标签的属性,每个属性定义了该产品的特性,例如,“SIZE(尺寸)”属性、“COLOR(颜色)”属性、“MATERIAL(材料)”属性、“COST(价格)”属性等。属性字段中提供有实际数据内容,例如,large(大号)、red and blue stripes(红蓝条纹)、cotton(棉)、$29.95等。然后可将关于该产品的数据(数据内容)以独立于平台的XML文件的形式发送到运行XML解释器程序的任何其他计算机上,XML解释器程序可以用于转换和理解这些特定标签。
使用面向对象技术开发的应用软件程序通常是基于底层“对象模型”。对象模型是描述***数据和行为的有关“对象”的集合。对象通常描述真实世界的实体。例如,名为“Address(地址)”的对象可具有名为“Street(街道)”、“City(城市)”等的属性以及名为“getStreetO”、“getCity0”的方法或函数。在构建良好的软件***中,将底层对象模型设计为独立于***中其他服务,例如传输机制,用户界面,数据存储等的层。按照这样的方式,对象模型成为可为其他应用所包含在内的可重用组件。
在使用XML的应用中,惯用的做法是将XML文件中所包含的数据模型化为对象模型。相反地,通常存在现有对象模型并使用XML作为串行化格式。例如,将具有标签<address>/<address>的XML实体模型化为对象名“Address”。从而,其他应用组件(例如,用户界面)的代码可与对象模型中的对象交互,但不与底层XML交互。这提供了将***中数据的含义与读出和写入,XML的实际机制相隔离的较好抽象层。从而,在***中会存在将对象模型转换到XML(反之亦然)的层。在某些情形中,XML中的数据元素以简单而直接的方式映射到对象模型中的值,正如在以上示例的。然而,通常的情形是,映射并不简单,且存在复杂的规则,以便进行转换。
一般而言,将XML文件转换成对象模型的过程涉及到三个基本步骤:第一、分析XML文本中的每个字符,以识别“合法”的XML标识(token),诸如开始标签,属性,结束标签,和CDATA节;第二、分析标识,以验证它们形成合法的XML结构(例如,所有标签具有匹配的打开和关闭标签);第三、在翻译过程中,将XML文件中包含的数据相应转换为属于对象模型和集合的数据元素和对象。数据元素可以表示为对象模型或其他对象中的简单属性。例如,“地址(address)”具有“城市(city)”,其为简单属性,“雇员(employee)”具有“地址(Address)”,其为表示对象模型中另一对象的复杂类型。通常还能够将地址(Address)的属性和雇员(Employee)与地址(Address)之间的对象关联,以作为结构特征。
由于众多不同类型的配置文件需要与不同的解释脚本关联起来,同时需要一种机制将运行期需要加载的***组件同配置文件对应起来,并且根据复杂业务平台配置多样性、配置文件解析规则复杂和组件数量众多的特点,实现新增的服务组件可以动态接入***的功能,即配置的位置决定文件可供加载,而不需要额外配置文件支持来描述新组件的接入。
参考图1,示出了本发明的一种XML文件解析方法实施例的流程图,可以包括以下步骤:
步骤101、定义所述XML的标签与相应对象模型特征的映射,所述对象模型特征具有配置属性,所述配置属性用于标识执行所述对象模型特征的栈名;
步骤102、生成由所述XML标签编写的XML文件,所述XML文件包括装载任务对象脚本和组件对象脚本;
步骤103、提取所述组件对象脚本的URI,并依据所述URI在所述装载任务对象脚本和组件对象脚本之间建立关联;
步骤104、解析所述装载任务对象脚本,生成装载任务序列,所述装载任务序列包括URI;
步骤105、遍历所述装载任务序列,获得当前URI指定的组件对象脚本;
步骤106、解析所述组件对象脚本,返回相应栈名对应的栈顶组件对象。
本发明假设使用元模型,即所述步骤101可以包括以下子步骤:
将描述所述对象模型特征的元模型特征映射到相应的XML标签。
具体而言,描述对象模型以及该模型中的不同对象彼此之间如何相关的模型,这种元模型的示例包括Eclipse建模框架(EMF)和JAVAbean。在其最简单形式中,XML解析器是在XML中的标签名与元模型的特征之间的映射,以及使用元模型的特征在值与XML之间来回转换所必需的相关行为。当存在描述对象模型的元模型时,也存在描述XML的表格和标签名的XML元数据。当应用本发明时,从XML到元模型元数据的映射被编码至解析器中。其解析基于对象模型实现,对象包含引用到其他子对象,且XML节点具有子节点,从而,所述解析器还包含到子翻译器的引用,这样就形成将对象模型和XML元模型相比照的树形结构。由于解析器包括关于如何将XML模型转换成对象模型以及如何将对象模型转换成XML的信息和规则,因而进行映射的所有复杂规则都包括在解析器中,若需要进行改变,则可以在解析器中定制相应规则使其得以实现。
优选的是,所述装载任务对象脚本可以包括装载对象配置文件和装载规则脚本,在这种情况下,所述步骤104可以包括以下子步骤:
子步骤S1、依据所述装载规则脚本生成第一SAX解析器;
子步骤S2、由所述第一SAX解析器解析所述装载任务对象脚本。
进一步地,所述组件对象脚本可以包括组件对象配置文件和组件规则脚本,在这种情况下,所述组件对象脚本的解析步骤可以包括以下子步骤:
子步骤S3、依据所述组件规则脚本生成第二SAX解析器;
子步骤S4、由所述第二SAX解析器解析所述组件对象脚本。
为保证SAX解析器的解析,本发明还可以包括以下步骤:
将描述所述元模型特征至所述XML标签的映射编码至所述SAX解析器中。
在这种情况下,所述SAX解析器可以包括用于在所述XML文件与对象模型特征之间进行转换的可执行代码。
以下对SAX解析XML文件的原理进行说明:
SAX是基于事件的简单API,例如,需要解析的XML代码如下所示:
<?xml version=″1.0″encoding=″gb2312″?>
<books>
<book email=″zhoujunhui″>
<name addr=″address″>rjzjh</name>
<price>jjjjjj</price>
</book>
</books>
这个XML文件中包括了根元素、属性、子节点。解析这个XML文件的Java代码如下所示:
1public class SaxParse{
2public SaxParse(){
3 SAXParserFactory saxfac=SAXParserFactory.newInstance();
4 try{
5 SAXParser saxparser=saxfac.newSAXParser();
6 InputStream is=new FileInputStream(″bin/library.xml″);
7 saxparser.parse(is,new MySAXHandler());
8 }catch(ParserConfigurationException e){
9 e.printStackTrace();
10 }catch(SAXException e){
11 e.printStackTrace();
12 }catch(FileNotFoundException e){
13 e.printStackTrace();
14 }catch(IOException e){
15 e.printStackTrace();
16 }
17 }
18 public static void main(String[]args){
19 new SaxParse();
20 }
21 }
其中,(1)得到SAX解析器的工厂实例
3 SAXParserFactory saxfac=SAXParserFactory.newInstance();
这是一个javax.xml.parsers.SAXParserFactory类的实例。
(2)从SAX工厂实例中获得SAX解析器
5 SAXParser saxparser=sax fac.newSAXParser();
即使用javax.xml.parsers.SAXParserFactory工厂的newSAXParser()方法。
(3)把要解析的XML文档转化为输入流,以便DOM解析器解析它
6 InputStream is=new FileInputStream(″bin/library.xml″);
InputStream是一个接口。
(4)解析XML文档
7 saxparser.parse(is,new MySAXHandler());
使用SAX解析器时,必须实现内容处理器ContentHandler接口中的一些回调方法,因而设置了org.xml.sax.helpers.DefaultHandler类,它的类声明为:
public class DefaultHandler
implements EntityResolver,DTDHandler,ContentHandler,ErrorHandler
可以看出,它至少实现了ContentHandler这一接口。这个类所对应的Java代码如下所示:public class MySAXHandler extends DefaultHandler{
boolean hasAttribute=false;
Attributes attributes=null;
/*(非Javadoc)
*@see org.xml.sax.helpers.DefaultHandler#startDocument()
*/
public void startDocument()throws SAXException{
System.out.println(″文档开始打印了″);
}
/*(非Javadoc)
*@see org.xml.sax.helpers.DefaultHandler#endDocument()
*/
public void endDocument()throws SAXException{
System.out.println(″文档打印结束了″);
}
/*(非Javadoc)
*@see
org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
java.lang.String,java.lang.String,org.xml.sax.Attributes)
*/
public void startElement(String uri,String localName,String
qName,
Attributes attributes)throws SAXException{
if(qName.equals(″books″)){
return;
}
if(qName.equals(″book″)){
System.out.println(attributes.getQName(0)+attributes.getValue(0));
}
if(attributes.getLength()>0){
this.attributes=attributes;
this.hasAttribute=true;
}
}
/*(非Javadoc)
*@see
org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
java.lang.String,java.lang.String)
*/
public void endElement(String uri,String localName,String
qName)
throws SAXException{
if(hasAttribute&&(attributes!=null)){
for(int i=0;i<attributes.getLength();i++){
System.out.println(attributes.getQName(0)+attributes.getValue(0));
}
}
}
/*(非Javadoc)
*@see org.xml.sax.helpers.DefaultHandler#characters(char[],int,
int)
*/
public void characters(char[]ch,int start,int length)
throws SAXException{
System.out.println(new String(ch,start,length));
}
}
这个类实现了ContentHandler接口中的如下方法:
(1)startDocument()用于处理文档解析开始事件
public void startDocument()throws SAXException{
System.out.println(″文档开始打印了″);
}
(2) endDocument()用于处理文档解析结束事件
public void endDocument()throws SAXException{
System.out.println(″文档打印结束了″);
}
(3) startElement用于处理元素开始事件
public void startElement(String uri,String localName,String
qName,
Attributes attributes)throws SAXException{
if(qName.equals(″books″)){
return;
}
if(qName.equals(″book″)){
System.out.println(attributes.getQName(0)+attributes.getValue(0));
}
if(attributes.getLength()>0){
this.attributes=attributes;
this.hasAttribute=true;
}
}
第二个参数String qName表示这个元素的名字,如:
根节点<books></books>它的qName为“books”
最底层节点<price>jjjjjj</price>它的qName为“price”
所述代码可以解释为,当遇到根元素“books”时就什么也不做跳过,当遇到“book”元素时就打出它的属性(它只有一个属性<bookemail=″zhoujunhui″></book>)。当是其它节点时(这下只剩下最底层的两个节点“name”和“price”了),就把它的属性取出来存到this.attributes域中,以后中元素结束事件好处理。
(4) endElement 用于处理元素结束事件
public void endElement(String uri,String localName,String
qName)
throws SAXException{
if(hasAttribute&&(attributes!=null)){
for(int i=0;i<attributes.getLength();i++){
System.out.println(attributes.getQName(0)+attributes.getValue(0));
}
}
}
代码的作用是如果这个元素的属性不为空(hasAttribute&&(attributes!=null)),就把它们打印出来。
(5) characters(char[]ch,int start,int length)处理元素字符的内容
public void characters(char[]ch,int start,intlength)
throws SAXException{
System.out.println(new String(ch,start,length));
}
还有其它的事件,只要看一下ContentHandler这个接口就行了,如:
(6)startPrefixMapping(String prefix,String URI)处理前缀映射开始事件,参数表示前缀名称和所指向的URI
(7)endPrefixMapping(String prefix,String URI)处理前缀映射结束事件,参数表示前缀名称和所指向的URI
(8)ignorableWhitespace(Char[]ch,int start,int length)处理元素中可忽略的空格
(9)processingInstruction(String target,String data)处理解析中产生的处理指令事件。
当然,上述方法仅仅用于举例,本领域技术人员根据需要或经验采用任一种扩展框架或解析器都是可行的,本发明对此不需要进行限定。
本发明实施例中一种技术实现关键在于,以模拟对象出入栈操作为蓝本,对象出入栈操作主要可以包括以下五个方面:
1、直接对栈的操作,如pop、dup、xchg、push-value、cp、dump等代码所对应的操作;
2、XML数据入栈,如push-attribute、push-content等代码所对应的操作;
3、使用XML数据对栈顶对象操作,如set-attribute、set-property、set-content等代码所对应的操作;
4.方法调用,如invoke-static、invoke-object、invoke-parent、invoke-child、create-object等代码所对应的操作;
5、动作标识,如begin、end、if、include-url、switch/case/default、if条件组等代码所对应的操作。
因而,本实施例可以通过以下子步骤返回栈顶组件对象:
子步骤Q1、依据所述栈名设置空栈S;
子步骤Q2、将相应的组件对象压入当前栈中;
子步骤Q3、提取栈顶组件对象出栈。
在实际中,根据配置加载的需求,所述XML数据的配置加载可以采用扩展commons-digester来实现。根据本说明书中的相关内容可以得知,commons-digester可以将XML数据装载成java object API。它使用了SAX解析器,当解释到某个XML事件标签时,触发同该标签相关的一组动作,在动作中而完成java object的创建、加工、方法调用等操作。基于所述commons-digester框架,可以开发config.rule,该包通过对commons-digester包的扩展,定义了一组对象模型特征,同时定义了所述对象模型特征的名称。XML标签用于编写XML规则脚本,规则脚本产生SAX解析器,SAX解析器可以用来解析XML配置创建对象。具体而言,规则脚本可以通过解析配置文件的对象模型特征,通过对栈的操作,完成配置数据和生成对象的缓存及运算的过程。例如,当遇到XML事件时,定义的对象模型特征可能产生新的对象,新产生的对象便保存在栈中;或者当从XML的事件中读取的属性,定义的对象模型特征可以用该属性的值,设置栈中对象的属性。
为使本领域技术人员更好地理解本发明,以下以在实际中应用本发明为例进行说明。
一、定义一组新的规则动作,每个规则动作都具有有一个特定属性target,它标识该标签动作操作的栈名。同时对原有commons-digester的解析器进行扩展,在原有内置栈的基础上,新增了一个扩展栈及其数据结构和对象出入栈操作,在解析过程中还可以动态建立临时栈。经过所述扩展后,所述解析器可以对规则动作target属性命名栈的识别,并支持新增规则动作对命名栈的操作。
例如,在扩展解析器中将新增扩展栈名为″___extend___″,commons-digester的解析器的原有内置栈名为″___base___″。新增规则动作通过命名栈target的方式,支持栈与栈之间操作。
二、针对上述定义的规则动作,定义与规则动作对应的规则标签,规则标签用于书写XML规则脚本。同时,扩展规则解析器以支持相应规则标签识别、从而触发规则对象工厂的调用,实现规则标签到规则动作对象的转化。
基于上述定义,应用本发明的一种XML文件解析过程为:
三、使用规则标签编写XML规则脚本,编写XML文件,其中,所述XML文件可以包括装载任务对象脚本和组件对象脚本,具体而言,所述装载任务对象脚本可以包括装载对象配置文件和装载规则脚本;所述组件对象脚本可以包括组件对象配置文件和组件规则脚本,
为了解决组件对象脚本与装载任务对象脚本之间的关联问题,引入了统一资源标识符(Uniform Resource Identifier,简称″URI″)唯一标识一个组件,公知的是,URI一般由三部分组成:访问资源的命名机制;存放资源的主机名;资源自身的名称、路径或者参数。例如,http://www.webmonkey.com.cn/html/html40/;这个URI表示了一个可通过HTTP协议访问的资源,位于主机www.webmonkey.com.cn上,通过路径“/html/html40”访问即可。在网络资源数据传输领域中比较常用的是URL(Uniform Resource Location,统一资源定位符),URL是URI命名机制的一个子集。在本例中,每个URI需要关联两份文件,组件对象脚本dataxml与装载任务对象脚本rulexml。进一步地,采用URI标识信息的一部分同另外的目录信息、获取方式信息组成URL,最终定位dataxml和rulexml。
四、解析装载任务对象脚本,在装载管理器中生成装载任务,具体可以包括以下步骤:
1、依据所述装载规则脚本生成SAX解析器。
2、由所述SAX解析器解析装载任务对象脚本,动态生成装载任务序列,每个装载任务序列具有URI标识。
五、指定装载任务URI,装载由URI标识的装载任务序列,以创建组件对象,具体可以包括以下步骤:
1、遍历URI标识的装载任务序列,取得指定装载任务的组件对象脚本;
2、依据所述组件对象脚本的组件规则脚本生成SAX解析器;
3、由所述SAX解析器解析组件对象脚本;
4、SAX解析器返回栈顶组件对象。
以下对出入栈的具体操作进行说明:
假设组件对象配置文件如以下代码所示:
<?xml version=″1.0″encoding=″gb2312″?>
<permission-manager>
<processor name=″identify_processor″
impl-class=″com.dc.eai.service.permission.identify.ServiceIdentify″/>
</permission-manager>
相应的组件规则脚本如以下代码所示:
<?xml version=″1.0″encoding=″gb2312″?>
<digester-rules>
<pattern value=″permission-manager″>
<begin>
<invoke-static
class-name=″com.dc.eai.service.permission.PermissionManager″
method-name=″getInstance″/>
</begin>
<pattern value=″processor″>
<begin>
<push-attribute attr-name=″name″/>
<create-object class-name=″impl-class″
param-count=″0″/>
<dup index=″2″/>
<invoke-object
method-name=″addProcessor″param-count=″2″/>
</begin>
</pattern>
<end>
<cp source=″___extend___″target=″___base___″/>
</end>
</pattern>
</digester-rules>
依据上述代码模拟栈操作的过程如图2所示,可以包括以下步骤:
步骤A1、置空扩展栈后,将permission-manager压入栈中(对应图2中第一个___extend___所表示的内容);
步骤A2、进一步将identify__processor压入栈中(对应图2中第二个___extend___所表示的内容);
步骤A3、进一步将ServiceIdentify压入栈中(对应图2中第二个___extend___所表示的内容);
步骤A4、提取栈顶元素permission-manager,并放入内置栈___base___中。
优选的是,本实施例还可以通过对装载任务序列进行遍历可以批量生成URI的装载,以支持组件即插即用。
综上所述,本发明通过开发新的规则动作模板以支持对命名栈的操作,在动作模板的基础上开发一组新的规则动作,相应地,对原有commons-digester的SAX解析器Digester进行扩展,支持对命名栈的操作,并且,定义与规则动作对应的规则标签,开发XML规则脚本DTD、规则对象工厂,扩展规则解析器以支持相应规则标签识别、从而触发规则对象工厂的调用,实现规则标签到规则动作对象的转化。从而使本发明可以适用各种XML标准报文格式,并且应用本发明的规则标签可以完成各种复杂的解析动作,大大简化了XML配置文件与XML规则脚本的开发和维护工作。其次,本发明无需额外生成配置文件描述与创建对象对应的配置文件和规则脚本,有效节约了***资源;再者,本发明通过遍历产生装载任务,能批量生成uri的装载,从而支持配量处理与组件即插即用。最后,本发明对于服务提供商来说,技术实现简单,无技术障碍,无特殊保密算法,成本和风险较低。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
参考图3,示出了本发明的一种XML文件解析装置实施例的结构框图,可以包括以下模块:
定义模块301,用于定义所述XML的标签与相应对象模型特征的映射,所述对象模型特征具有配置属性,所述配置属性用于标识执行所述对象模型特征的栈名;
生成模块302,用于生成由所述XML标签编写的XML文件,所述XML文件包括装载任务对象脚本和组件对象脚本;
关联模块303,用于提取所述组件对象脚本的URI,并依据所述URI在所述装载任务对象脚本和组件对象脚本之间建立关联;
装载解析模块304,用于解析所述装载任务对象脚本,生成装载任务序列,所述装载任务序列包括URI;
遍历模块305,用于遍历所述装载任务序列,获得当前URI指定的组件对象脚本;
组件解析模块306,用于解析所述组件对象脚本,返回相应栈名对应的栈顶组件对象。
在本实施例中,优选的是,所述装载任务对象脚本包括装载对象配置文件和装载规则脚本,在这种情况下,所述装载解析模块304可以进一步包括以下子模块:
第一解析器产生子模块,用于依据所述装载规则脚本生成第一SAX解析器;
第一SAX解析器,用于解析所述装载任务对象脚本。
相应地,所述组件对象脚本可以包括组件对象配置文件和组件规则脚本,在这种情况下,所述组件解析模块306可以进一步包括以下子模块:
第二解析器产生子模块,用于依据所述组件规则脚本生成第二SAX解析器;
第二SAX解析器,用于解析所述组件对象脚本。
更为优选的,所述组件解析模块306还可以进一步包括以下子模块:
建栈子模块,用于依据所述栈名设置空栈;
压栈子模块,用于将相应的组件对象压入当前栈中;
出栈子模块,用于提取栈顶组件对象出栈。
在本实施例中,所述定义模块还可以包括标签映射子模块,用于将描述所述对象模型特征的元模型特征映射到相应的XML标签。
优选的是,本实施例还可以包括编码模块,用于将描述所述元模型特征至所述XML标签的映射编码至所述SAX解析器中。
对于装置实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本发明所提供的一种XML文件解析的方法及一种XML文件解析的装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (13)
1.一种XML文件解析的方法,其特征在于,包括:
定义所述XML的标签与相应对象模型特征的映射,所述对象模型特征具有配置属性,所述配置属性用于标识执行所述对象模型特征的栈名;
生成由所述XML标签编写的XML文件,所述XML文件包括装载任务对象脚本和组件对象脚本;
提取所述组件对象脚本的URI,并依据所述URI在所述装载任务对象脚本和组件对象脚本之间建立关联;
解析所述装载任务对象脚本,生成装载任务序列,所述装载任务序列包括URI;
遍历所述装载任务序列,获得当前URI指定的组件对象脚本;
解析所述组件对象脚本,返回相应栈名对应的栈顶组件对象。
2.如权利要求1所述的方法,其特征在于,所述装载任务对象脚本包括装载对象配置文件和装载规则脚本,所述装载任务对象脚本的解析步骤进一步包括:
依据所述装载规则脚本生成第一SAX解析器;
由所述第一SAX解析器解析所述装载任务对象脚本。
3.如权利要求1或2所述的方法,其特征在于,所述组件对象脚本包括组件对象配置文件和组件规则脚本,所述组件对象脚本的解析步骤进一步包括:
依据所述组件规则脚本生成第二SAX解析器;
由所述第二SAX解析器解析所述组件对象脚本。
4.如权利要求1所述的方法,其特征在于,通过以下步骤返回栈顶组件对象:
依据所述栈名设置空栈;
将相应的组件对象压入当前栈中;
提取栈顶组件对象出栈。
5.如权利要求3所述的方法,其特征在于,所述定义步骤还包括:
将描述所述对象模型特征的元模型特征映射到相应的XML标签。
6.如权利要求5所述的方法,其特征在于,还包括:
将描述所述元模型特征至所述XML标签的映射编码至所述SAX解析器中。
7.如权利要求6所述的方法,其特征在于,所述SAX解析器包括用于在所述XML文件与对象模型特征之间进行转换的可执行代码。
8.一种XML文件解析的装置,其特征在于,包括:
定义模块,用于定义所述XML的标签与相应对象模型特征的映射,所述对象模型特征具有配置属性,所述配置属性用于标识执行所述对象模型特征的栈名;
生成模块,用于生成由所述XML标签编写的XML文件,所述XML文件包括装载任务对象脚本和组件对象脚本;
关联模块,用于提取所述组件对象脚本的URI,并依据所述URI在所述装载任务对象脚本和组件对象脚本之间建立关联;
装载解析模块,用于解析所述装载任务对象脚本,生成装载任务序列,所述装载任务序列包括URI;
遍历模块,用于遍历所述装载任务序列,获得当前URI指定的组件对象脚本;
组件解析模块,用于解析所述组件对象脚本,返回相应栈名对应的栈顶组件对象。
9.如权利要求8所述的装置,其特征在于,所述装载任务对象脚本包括装载对象配置文件和装载规则脚本,所述装载解析模块进一步包括:
第一解析器产生子模块,用于依据所述装载规则脚本生成第一SAX解析器;
第一SAX解析器,用于解析所述装载任务对象脚本。
10.如权利要求8或9所述的装置,其特征在于,所述组件对象脚本包括组件对象配置文件和组件规则脚本,所述组件解析模块进一步包括:
第二解析器产生子模块,用于依据所述组件规则脚本生成第二SAX解析器;
第二SAX解析器,用于解析所述组件对象脚本。
11.如权利要求8所述的装置,其特征在于,组件解析模块进一步包括:
建栈子模块,用于依据所述栈名设置空栈;
压栈子模块,用于将相应的组件对象压入当前栈中;
出栈子模块,用于提取栈顶组件对象出栈。
12.如权利要求10所述的装置,其特征在于,所述定义模块还包括:
标签映射子模块,用于将描述所述对象模型特征的元模型特征映射到相应的XML标签。
13.如权利要求12所述的装置,其特征在于,还包括:
编码模块,用于将描述所述元模型特征至所述XML标签的映射编码至所述SAX解析器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100060670A CN101221556B (zh) | 2008-02-01 | 2008-02-01 | 一种xml文件解析的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100060670A CN101221556B (zh) | 2008-02-01 | 2008-02-01 | 一种xml文件解析的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101221556A true CN101221556A (zh) | 2008-07-16 |
CN101221556B CN101221556B (zh) | 2010-06-02 |
Family
ID=39631402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100060670A Active CN101221556B (zh) | 2008-02-01 | 2008-02-01 | 一种xml文件解析的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101221556B (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102023871A (zh) * | 2011-01-07 | 2011-04-20 | 中国农业银行股份有限公司 | 一种xml信息获取方法和*** |
CN102253830A (zh) * | 2011-06-10 | 2011-11-23 | 南京中兴力维软件有限公司 | 一种在Struts 2下自动生成配置文件的方法 |
CN102567002A (zh) * | 2010-12-29 | 2012-07-11 | 上海邮电设计咨询研究院有限公司 | 一种电信增值业务开发环境中转换代码的方法 |
CN102789495A (zh) * | 2012-07-13 | 2012-11-21 | 航天恒星科技有限公司 | 一种通用的文件自动化解析处理*** |
CN102073662B (zh) * | 2009-11-23 | 2012-12-19 | 北大方正集团有限公司 | 一种解析和创建xml数据的方法及*** |
CN102880492A (zh) * | 2012-09-24 | 2013-01-16 | 广东华大集成技术有限责任公司 | 一种基于as的xml脚本解析器及其方法 |
CN101751256B (zh) * | 2009-12-31 | 2013-09-11 | 金蝶软件(中国)有限公司 | 与第三方***交换数据的方法和*** |
CN104268143A (zh) * | 2014-08-08 | 2015-01-07 | 华迪计算机集团有限公司 | Xml数据的处理方法和装置 |
CN105630752A (zh) * | 2015-12-25 | 2016-06-01 | 中国民航信息网络股份有限公司 | 支持业务模型快速变更的方法 |
CN106598578A (zh) * | 2016-12-05 | 2017-04-26 | 沈阳中科创达软件有限公司 | 一种可扩展标记语言解析方法及装置 |
CN106886390A (zh) * | 2015-12-15 | 2017-06-23 | 大唐软件技术股份有限公司 | 一种Java对象生成和转换方法和Java对象生成和转换装置 |
CN107342881A (zh) * | 2016-05-03 | 2017-11-10 | ***通信集团四川有限公司 | 一种操作维护中心北向接口数据处理方法及装置 |
CN107506190A (zh) * | 2017-08-16 | 2017-12-22 | 中国银行股份有限公司 | 基于Spring框架的XML文件修改方法及装置 |
CN108847852A (zh) * | 2018-06-08 | 2018-11-20 | 中国人民解放军国防科技大学 | 基于sca的域配置文件解析器及其使用方法 |
CN109144489A (zh) * | 2017-06-16 | 2019-01-04 | 上海赛特斯信息科技股份有限公司 | 基于Yang语言模型的状态数据处理方法 |
CN109976799A (zh) * | 2019-02-19 | 2019-07-05 | 武大吉奥信息技术有限公司 | 一种基于树形结构软件配置模型的实现方法及装置 |
CN110262842A (zh) * | 2018-03-12 | 2019-09-20 | 福建天泉教育科技有限公司 | 一种启动组件的方法及终端 |
CN111596905A (zh) * | 2020-05-09 | 2020-08-28 | 远光软件股份有限公司 | 生成java对象的方法、装置、存储介质及终端 |
CN112347063A (zh) * | 2019-08-07 | 2021-02-09 | 中国石油化工股份有限公司 | 一种实现地震数据共享的方法及存储介质 |
CN113504909A (zh) * | 2021-06-30 | 2021-10-15 | 中汽数据(天津)有限公司 | 工业app异构组件数据交换方法及相关设备 |
CN113703787A (zh) * | 2020-05-20 | 2021-11-26 | 网神信息技术(北京)股份有限公司 | 安装包处理方法、装置、电子设备、计算机可读存储介质 |
CN115334177A (zh) * | 2022-07-07 | 2022-11-11 | 浙江众合科技股份有限公司 | 基于xml配置文件递归实现的二进制数据报文解析方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354282A (zh) * | 2015-10-30 | 2016-02-24 | 青岛海尔智能家电科技有限公司 | 一种xml文件检索方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7240119B2 (en) * | 2002-11-04 | 2007-07-03 | Ge Fanuc Automation North America, Inc. | Method for configuring a programmable logic controller using an extensible markup language schema |
CN100354862C (zh) * | 2004-11-19 | 2007-12-12 | 北京九州软件有限公司 | 计算机文档的存储及解析方法 |
CN100485692C (zh) * | 2007-06-29 | 2009-05-06 | 中兴通讯股份有限公司 | Xml数据存储***和方法 |
-
2008
- 2008-02-01 CN CN2008100060670A patent/CN101221556B/zh active Active
Cited By (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073662B (zh) * | 2009-11-23 | 2012-12-19 | 北大方正集团有限公司 | 一种解析和创建xml数据的方法及*** |
CN101751256B (zh) * | 2009-12-31 | 2013-09-11 | 金蝶软件(中国)有限公司 | 与第三方***交换数据的方法和*** |
CN102567002A (zh) * | 2010-12-29 | 2012-07-11 | 上海邮电设计咨询研究院有限公司 | 一种电信增值业务开发环境中转换代码的方法 |
CN102023871A (zh) * | 2011-01-07 | 2011-04-20 | 中国农业银行股份有限公司 | 一种xml信息获取方法和*** |
CN102023871B (zh) * | 2011-01-07 | 2014-02-12 | 中国农业银行股份有限公司 | 一种xml信息获取方法和*** |
CN102253830B (zh) * | 2011-06-10 | 2014-09-03 | 南京中兴力维软件有限公司 | 一种在Struts2下自动生成配置文件的方法 |
CN102253830A (zh) * | 2011-06-10 | 2011-11-23 | 南京中兴力维软件有限公司 | 一种在Struts 2下自动生成配置文件的方法 |
CN102789495A (zh) * | 2012-07-13 | 2012-11-21 | 航天恒星科技有限公司 | 一种通用的文件自动化解析处理*** |
CN102789495B (zh) * | 2012-07-13 | 2015-05-27 | 航天恒星科技有限公司 | 一种通用的文件自动化解析处理*** |
CN102880492A (zh) * | 2012-09-24 | 2013-01-16 | 广东华大集成技术有限责任公司 | 一种基于as的xml脚本解析器及其方法 |
CN102880492B (zh) * | 2012-09-24 | 2015-09-02 | 广东华大集成技术有限责任公司 | 一种基于as的xml脚本解析器及其方法 |
CN104268143A (zh) * | 2014-08-08 | 2015-01-07 | 华迪计算机集团有限公司 | Xml数据的处理方法和装置 |
CN104268143B (zh) * | 2014-08-08 | 2017-10-20 | 华迪计算机集团有限公司 | Xml数据的处理方法和装置 |
CN106886390A (zh) * | 2015-12-15 | 2017-06-23 | 大唐软件技术股份有限公司 | 一种Java对象生成和转换方法和Java对象生成和转换装置 |
CN105630752A (zh) * | 2015-12-25 | 2016-06-01 | 中国民航信息网络股份有限公司 | 支持业务模型快速变更的方法 |
CN105630752B (zh) * | 2015-12-25 | 2018-05-04 | 中国民航信息网络股份有限公司 | 支持业务模型快速变更的方法 |
CN107342881A (zh) * | 2016-05-03 | 2017-11-10 | ***通信集团四川有限公司 | 一种操作维护中心北向接口数据处理方法及装置 |
CN107342881B (zh) * | 2016-05-03 | 2021-03-19 | ***通信集团四川有限公司 | 一种操作维护中心北向接口数据处理方法及装置 |
CN106598578A (zh) * | 2016-12-05 | 2017-04-26 | 沈阳中科创达软件有限公司 | 一种可扩展标记语言解析方法及装置 |
CN109144489B (zh) * | 2017-06-16 | 2021-11-05 | 上海赛特斯信息科技股份有限公司 | 基于Yang语言模型的状态数据处理方法 |
CN109144489A (zh) * | 2017-06-16 | 2019-01-04 | 上海赛特斯信息科技股份有限公司 | 基于Yang语言模型的状态数据处理方法 |
CN107506190A (zh) * | 2017-08-16 | 2017-12-22 | 中国银行股份有限公司 | 基于Spring框架的XML文件修改方法及装置 |
CN110262842A (zh) * | 2018-03-12 | 2019-09-20 | 福建天泉教育科技有限公司 | 一种启动组件的方法及终端 |
CN108847852A (zh) * | 2018-06-08 | 2018-11-20 | 中国人民解放军国防科技大学 | 基于sca的域配置文件解析器及其使用方法 |
CN109976799A (zh) * | 2019-02-19 | 2019-07-05 | 武大吉奥信息技术有限公司 | 一种基于树形结构软件配置模型的实现方法及装置 |
CN109976799B (zh) * | 2019-02-19 | 2022-07-08 | 武大吉奥信息技术有限公司 | 一种基于树形结构软件配置模型的实现方法及装置 |
CN112347063A (zh) * | 2019-08-07 | 2021-02-09 | 中国石油化工股份有限公司 | 一种实现地震数据共享的方法及存储介质 |
CN111596905A (zh) * | 2020-05-09 | 2020-08-28 | 远光软件股份有限公司 | 生成java对象的方法、装置、存储介质及终端 |
CN113703787A (zh) * | 2020-05-20 | 2021-11-26 | 网神信息技术(北京)股份有限公司 | 安装包处理方法、装置、电子设备、计算机可读存储介质 |
CN113504909A (zh) * | 2021-06-30 | 2021-10-15 | 中汽数据(天津)有限公司 | 工业app异构组件数据交换方法及相关设备 |
CN115334177A (zh) * | 2022-07-07 | 2022-11-11 | 浙江众合科技股份有限公司 | 基于xml配置文件递归实现的二进制数据报文解析方法 |
CN115334177B (zh) * | 2022-07-07 | 2023-12-05 | 浙江众合科技股份有限公司 | 基于xml配置文件递归实现的二进制数据报文解析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101221556B (zh) | 2010-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101221556B (zh) | 一种xml文件解析的方法及装置 | |
US7827527B1 (en) | System and method of application development | |
US8527943B1 (en) | System and method of application development | |
US6785685B2 (en) | Approach for transforming XML document to and from data objects in an object oriented framework for content management applications | |
CN102129364B (zh) | 应用程序中嵌入微件工具栏的方法和快速访问微件的方法 | |
US6976020B2 (en) | Software composition using graph types, graph, and agents | |
Casteleyn et al. | Engineering web applications | |
US7155705B1 (en) | Techniques for binding an application with a data exchange format based on tags in comments | |
US8549497B2 (en) | High-level hypermedia synthesis for adaptive web | |
US7836119B2 (en) | Distributed execution model for cross-organizational declarative web applications | |
US20030037181A1 (en) | Method and apparatus for providing process-container platforms | |
JP2002024079A (ja) | サーバ側制御オブジェクトを用いるデータ結合 | |
CN101849228A (zh) | 用于创建面向IT的基于服务器的Web应用的方法和*** | |
WO2007129224A2 (en) | Legacy software modernization system | |
CN100517222C (zh) | 支持转换引擎与映射规则相分离的模型转换装置及其方法 | |
Skogan | UML as a schema language for XML based data interchange | |
Nguyen | Model-based version and configuration management for a web engineering lifecycle | |
Anderson et al. | Structural templates and transformations: the Themis structural computing environment | |
Abrams et al. | User interface markup language (UIML) specification | |
EP1419459A2 (en) | Web interaction system which enables a mobile telephone to interact with web resources | |
Preston | RADGIS-An improved architecture for runtime-extensible, distributed GIS applications | |
Preciado et al. | E RICHI G MODEL-BASED WEB APPLICATIO S PRESE TATIO | |
Mostarda et al. | MU: an hybrid language for Web Mashups | |
Owolabi et al. | Towards implementing integrated building product libraries | |
Cherkashin et al. | Model Driven Architecture Implementation Using Linked Data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |