对XML报文中的节点进行划分及其对其应用的方法技术

技术编号:3933751 阅读:296 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种XML报文中节点的划分方法,以及基于上述节点划分方法的节点类型判断方法、定位元素方法、定位当前元素的第一个子元素的方法、相邻元素的定位方法、XML报文的解析方法,本发明专利技术提供的解析方法适合使用C语言实现,可以应用于嵌入式环境中,并且不需要建立节点树,占用内存小。

【技术实现步骤摘要】

本专利技术涉及计算机应用领域,特别涉及一种对XML报文中的节点进行划分及其对 其应用的方法。
技术介绍
XML(Extensible Markup Language)即可扩展标记语言,它与 HTML—样,都是 SGML (Standard Generalized Markup Language,标准通用标记语言)。XML 是 Internet 环 境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。可扩展标记语 言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用 方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易 于掌握和使用。XML广泛的应用于网络及其相关技术,目前对XML报文进行解析的方法,普遍的为 XML DOMjXML DOM定义了访问和处理XML报文的标准方法,XML DOM是XML Document Object Model的缩写,即XML报文对象模型。当主机使用XML DOM所提供的方法进行XML报文的 解析时,需要先将XML全部节点进行扫描,并在主机内存中建立完整的节点树,通过节点树 对XML报文中的符合条件的数据进行查找,这种方法占用主机的内存资源过多,尤其是当 对XML报文的解析在单片机中进行时,如智能卡中对XML报文的解析,智能卡由于体积的限 制,本身的内存资源较小,当使用XML DOM的方法对XML报文进行解析时,如果XML报文过 大,则智能卡设备的内存负担过大。在对XML报文进行解析时,还可以采用面向对象编程的方法,使用面向对象语言 中提供的接口,通过编程实现XML解析器,使用解析器对XML报文进行解析,但是这种方法 不适用于嵌入式环境,嵌入式环境不能支持面向对象的XML解析方法,但是由于嵌入式的 广泛应用,例如智能密钥设备USB Key等,在嵌入式环境中对XML报文的解析是必不可少 的。综上所述,现有技术的的缺点是现有的对XML报文的解析方法占用大量的内存 资源或不能适用于嵌入式环境中对XML报文的解析。
技术实现思路
鉴于现有技术的不足,本专利技术提供了一种XML报文中节点的划分方法,如下步骤Al,获取当前位置和当前位置的值;步骤A2,判断当前位置的值是否超过了所述XML报文的总长度或者为负数,如果 当前位置的值超过了所述XML报文的总长度或者为负数,返回错误,否则,执行步骤A3 ;步骤A3,判断当前位置对应的字符是否为“<”或“>”,如果是,执行步骤A5,如果 不是,执行步骤A4;步骤A4,将当前位置移动一个单位,并将移动一个单位后得到的字符的位置作为 当前位置,返回执行步骤A2;步骤A5,将当前位置作为当前节点的节点边界,并将当前位置移动一个单位,将移 动一个单位后得到的字符的位置设置为当前位置;步骤A6,判断当前位置的值是否超过了所述XML报文的总长度或者为负数,如果 当前位置的值超过了所述XML报文的总长度或者为负数,返回错误,否则,执行步骤A7 ;步骤A7,判断当前位置对应的字符是否为“<”或“>”,如果是,执行步骤A8,如果 不是,将当前位置按与步骤A5中当前位置移动方向相同的方向移动一个单位,将移动一个 单位后得到的字符的位置作为当前位置,返回执行步骤A6 ;步骤A8,将当前位置作为当前节点的另一个节点边界,得到当前节点,所述节点边 界包括节点头和节点尾。优选地,所述当前位置的值为当前位置的字符相对于所述XML报文起始位置的偏 移。相应地,所述当前节点使用一个二元组进行表示,所述二元组包括所述当前节点 的节点头和节点尾,在所述二元组中,使用所述当前节点的节点头相对于所述XML报文中 起始位置的偏移表示所述节点头,使用所述当前节点的节点尾相对于所述XML报文中起始 位置的偏移表示所述节点尾。优选地,步骤A4具体的包括将当前位置向前移动一个单位,并将所述向前移动一个单位后得到的字符的位置 作为当前位置,并将表示当前位置的值递减1,返回执行步骤A2 ;或,将当前位置向后移动一个单位,并将所述向后移动一个单位后得到的字符的位置 作为当前位置,并将表示当前位置的值递增1,返回执行步骤A2。 优选地,步骤A5具体的包括将当前位置作为当前节点的节点头,并将当前位置向后移动一个单位,将向后移 动一个单位后得到的字符的位置设置为当前位置,并将表示当前位置的值递增1 ;或,将当前位置作为当前节点的节点尾,并将当前位置向前移动一个单位,将向前移 动一个单位后得到的字符的位置设置为当前位置,并将表示当前位置的值递减1。相应地,当步骤A5中,将当前位置作为当前节点的节点头,并将当前位置向后移 动一个单位时,步骤A7具体的为判断当前位置对应的字符是否为“<”或“>”,如果是,执行步骤A8,如果不是,将 当前位置向后移动一个单位,将向后移动一个单位后得到的字符的位置作为当前位置,并 令表示当前位置的值递增1,返回执行步骤A6。相应地,当步骤A5中,将当前位置作为当前节点的节点尾,并将当前位置向前移 动一个单位时,步骤A7具体的为判断当前位置对应的字符是否为“<”或“>”,如果是,执行步骤A8,如果不是,将 当前位置向前移动一个单位,将向前移动一个单位后得到的字符的位置作为当前位置,并 令表示当前位置的值递减1,返回执行步骤A6。相应地,当步骤A5中,将当前位置作为当前节点的节点头,并将当前位置向后移 动一个单位时,步骤A8具体的为将当前位置作为当前节点的节点尾,得到当前节点。相应地,当步骤A5中,将当前位置作为当前节点的节点尾,并将当前位置向前移 动一个单位时,步骤A8具体的为将当前位置作为当前节点的节点头,得到当前节点。优选地,所述将当前位置移动一个单位为由当前字符的位置移动一个字符的距罔。通过上述一种XML报文中节点的划分方法,本专利技术可以实现一种XML报文中节点 类型判断方法,具体的为步骤B 1,判断当前节点是否为以“ < ”开头,以“ > ”结尾,如果是,执行步骤B2, 如果不是,执行步骤B7 ;步骤B2,判断当前节点中字符“<”之后的第一个位置对应的字符,如果为“? ”,执 行步骤B3,如果为“ ! ”,执行步骤B4,如果为“/”,执行步骤B5,否则,执行步骤B6 ;步骤B3,判断当前节点中字符“ >,,之前的位置所对应的字符是否为“ ? ”,如果是 “ ? ”,判断当前节点中“ <,,之后的下一个位置的“? ”与“ >,,之前第一个位置的“ ?,,是否 重合,如果不重合,则记录当前节点为XML报文的头,如果重合,返回错误,如果不是“ ? ”,报 文错误;步骤B4,记录当前节点为不需要解析的部分;步骤B5,记录当前节点为元素尾;步骤B6,判断当前节点中字符“>”前的一个字符是否为“/”,如果是,则当前节点 为一个完整的元素,否则,当前节点为一个元素的元素头;步骤B7,判断当前节点是否以“>”开头,以“<”结尾,如果是,则记录当前节点为 元素中间的值,如果不是,返回错误,结束判断节点类型。通过上述一种XML报文中节点的划分方法,本专利技术可以实现一种XML报文中定位 元素的方法,具体的包括步骤Cl,判断本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:陆舟于华章
申请(专利权)人:北京飞天诚信科技有限公司
类型:发明
国别省市:11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1