xml算法流程设计_第1页
xml算法流程设计_第2页
xml算法流程设计_第3页
xml算法流程设计_第4页
xml算法流程设计_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 xml 文本解析成 xml 节点链表的详细逻辑流程文档 2 写代码实现对一段 xml 文本的解析 设计目的 实现一个读取 xml 文件的信息存入数据结构以及如何将结构体中的 数据还原成一个 xml 文件的这样一个解析器 设计题目 xml 解析器 算法的出栈基本思路 如果该元素是一个空元素 则形如 只要找到了 就可以将加入栈顶点的元 素提取出来 还有一种情况是非空元素 则形如 如果找到的是 就将其后面的标签名与刚压栈的节点标签匹配 如果匹配 成功 那么栈顶节点就可以出栈了 基于这个原理就可以很好的区分它们之间的层次关系了 算法的详细流程 1 首先准备一个 xml 文件 然后将 xml 文件载入内存 可以定义一个 buf 用文 件读写的方式将 xml 的完整内容存入到这个 buf 当中 当然该 buf 不能太小 否则会溢出 这时 xml 文件的内容已经全部读取到 buf 中了 这时只需要 对该 buf 进行操作 这个过程可以用 open 函数来打开文件 通过 read 函数将 xml 文件里面的 内容全部读取到 buf 中 在 buf 最后面加 0 表示字符串结束 2 判断文件是否结束 可以根据 0 来判断是否结束 如果结束 再判断 栈是否为空 为空正常结束 不为空就异常结束 通过一个 char 类型的指针来接收这块 buf 如 char str buf 3 如果 buf 没有到最末位置 接着就判断有效字符是否是 如果不是的话 程序就直接异常结束 因为 xml 第一个字符必须是 这就是所谓的有效 字符 不满足该条件就不符合 xml 文档的格式要求 4 如果该字符是有效字符 继续向后执行 5 判断标志类型 6 如果标志类型是版本标志 如果找到 了就定位成功 则跳到第 3 步继续向后进行操作 如果没找到定位不成功 就异常结束 因为这不是一个语法正确地 xml 文档 7 如果标志类型是节点标志 这个应该是一个空元素的表示方法 顶点出栈 出栈的原因是该元素已 经被完全解析出来了 顶点中的内容就是所需要的内容 应该出栈了 10 如果没有找到结束标志 接着判断是否有节点值 如果有节点值的话 就提取该节点值 然后跳到第 2 步继续重复上面的操作 直到解析完该 buf 为止 如果没有节点值也跳到第 2 步继续执行 11 如果结束标志是 就取结束标签名 判断该标签名与栈顶节点是否匹 配 如果匹配成功 顶点出栈 如果没有匹配成功 则跳到第 4 步继续执行 while str if str 判断是否是有效字符 if str 1 判断是不是结束标志 取结束标签名 并将其保存到所定义的 name 数组中 char name 50 0 sscanf str name 将该标签名与栈顶节点匹配 看是否是同一个节点 if strcmp peak m element name 0 peak 可以获取 栈顶点的元素 pop 如果匹配成功 直接将栈顶元素弹出 将 str 移动到 strlen name 3 即移动到 else 什么也不做 else 节点标志 取该节点的标签名 sscanf str m element a push xmlNode 将该节点压入栈中 将 str 指针的位置向后移动 strlen a 2 个字节 继续向下 走 str str strlen a 1 加 1 而不是加 2 while str if str 判断是否有属性 取属性名和值 str 将读取到的属性名和值保存在 xmlNode 结构体的 sscanf str xmlNode m attributes 将 str 向后移动 strlen xmlNode m attributes str str strlen xmlNode m attributes if str 表示节点没有属性 str 这步很关键 if strncmp str 2 0 结束标志 pop 结束标志表示找到了关闭标签 栈顶元素出栈 else 在此增加 flag 标志 判断该元素是否有属性 if str 判读是否有节点值 str 将指针移动到 提取节点值 定义 char 类型数组来保存内容 char b 50 0 sscanf str m data b 将 str 指针继续移动 strlen b 1 红色加 1 那部分不用 指针出错 else 表示没有节点值 什么也不做 str 找不到有效字符 str if str 0 表示已经读到文件尾部 if is empty 判断栈是否为空 return 为空正常结束 else 表示栈的内容不为空 printf stack is not empty n exit 1 到文件结束位置 栈的内容必须全部为空 否则存在没有 关闭标签的标签 准备xml文档 将xml文件载入内存 文件结束栈是否为空 YY 正常结束

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论