XML文件的简单初步解析

转载 2007年09月25日 15:21:00
 摘要:通过扫描字符串及结构体数组,实现对XML文件的简单初步解析。

关键字:XML,解析

主要算法:XML文件的实质是字符串,解析XML的工作主要是了解XML的规则,从而对字符串进行分析,解析。从XML文件的开始扫描,连续获得2个标签的位置,转化为字符串,比较firstname和nextname,如果匹配关闭,则把标签名,内容,层次,存放到结构体数组中,继续扫描,如果不匹配,则把firstname压栈,继续扫描,直到firstname和nextname匹配或者与栈顶元素匹配。本题主要是自己设计一种数据结构和一种算法来把解析出来的XML数据信息,合理的存放,从而实现最简单最初步的解析。我是在控制台上实现的,运行后可以把XML的所有结点的标签名,值,以及它位于整个XML文件的层次。具体的请参考源程序,在VC6.0下测试通过(其中的web.xml为程序运行的初始xml文件)。

结构体定义
struct xmlnode
{
    CString name;
//标签名
    CString value;//内容
    int id;//这个标签的层次,通过栈实现
}
;
xmlnode node[
1000];
解析函数:
void str2array(CString context)
{
    CString firstname;
    CString nextname;
    CString tempname;
    CString tempvalue;
    CStringArray stack;
//一个记录标签是否关闭的栈
    stack.Add("");
    
int max=0;
    
int nid=1;
    
int k=0;
    
int i1,i2,j1,j2,k1,k2;
    
while((k<context.GetLength())&&(context[k]!=''<''))//确定各个标签的位置
    {
        k
++;
    }

    i1
=k; 
    
while((k<context.GetLength())&&(context[k]!='' '')&&(context[k]!=''>''))
    
{
        k
++;
    }

    k1
=k;
    
while((k<context.GetLength())&&(context[k]!=''>''))
    
{
        k
++;
    }

    j1
=k;
    firstname
=getcontext(context,i1,k1);//获得第一个标签
    while((k<context.GetLength())&&(context[k]!=''<''))//确定各个标签的位置
    {
        k
++;
    }

    i2
=k;
    
while((k<context.GetLength())&&(context[k]!='' '')&&(context[k]!=''>''))
    
{
        k
++;
    }

    k2
=k;
    
while((k<context.GetLength())&&(context[k]!=''>''))
    
{
        k
++;
    }

    j2
=k;
    nextname
=getcontext(context,i2,k2);//获得第二个标签
    tempname=''/''+firstname;
    
while(k<context.GetLength())
    
{
        
if(tempname.Compare(nextname)==0)//该标签关闭
        {
            node[count].name
=firstname;
            tempvalue
=getcontext(context,j1,i2);
            tempvalue.TrimLeft();
            tempvalue.TrimRight();
            node[count].value
=tempvalue;
            node[count].id
=nid;
            count
++;
            
do
            
{
                
while((k<context.GetLength())&&(context[k]!=''<''))//获得下一个标签
                {
                    k
++;
                }

                i2
=k;
                
while((k<context.GetLength())&&(context[k]!='' '')&&(context[k]!=''>''))
                
{
                    k
++;
                }

                k2
=k;
                
while((k<context.GetLength())&&(context[k]!=''>''))
                
{
                    k
++;
                }

                j2
=k;
                nextname
=getcontext(context,i2,k2);
                
if(nextname.Compare(stack.GetAt(max))==0)
                
{
                    stack.RemoveAt(max);
                    nid
--;
                    max
--;
                }

            }
while((nextname.GetLength()>0)&&(nextname[0]==''/''));
            
//same
        }

        
else//标签没有关闭,压栈
        {
            tempname
=''/''+firstname;
            max
++;
            stack.Add(tempname);
            node[count].name
=firstname;
            node[count].value
="";
            node[count].id
=nid;
            count
++;
            nid
++;
            
//different
        }

        firstname
=nextname;
        i1
=i2;
        k1
=k2;
        j1
=j2;
        
while((k<context.GetLength())&&(context[k]!=''<''))//获得下一个标签
        {
            k
++;
        }

        i2
=k;
        
while((k<context.GetLength())&&(context[k]!='' '')&&(context[k]!=''>''))
        
{
            k
++;
        }

        k2
=k;
        
while((k<context.GetLength())&&(context[k]!=''>''))
        
{
            k
++;
        }

        j2
=k;
        nextname
=getcontext(context,i2,k2);
        tempname
=''/''+firstname;
    }

}

本程序对XML开始的说明部分不能解析,对注释也不能解析,只能达到一个最基本的解析。

相关文章推荐

关于android单元测试结合SAX解析xml文件初步分析

学android有一段时间了,最让我困惑的是项目老报错,一个Debug找半天很费时一直很苦恼。昨天晚上看了android单元测试资料。给大家分享下我学到的一点调试技巧,不要喷我。小弟刚接触androi...

Mainfest.xml文件的初步解析

AndroidManifest.xml配置文件的介绍 1.全局篇 package:所建项目的包名 minSdkVersion:最小的SDK版本,对应Android不同版本的API Lev...

Js解析xml文件并简单实现省市区级联菜单(并解决各浏览器兼容性问题).

转载地址:http://blog.csdn.net/redarmy_chen/article/details/6520693 首先我们采用是DOM (Document Object Model...
  • wanglha
  • wanglha
  • 2015年08月27日 15:03
  • 772

关于如何简单创建Xml文件和用SAX解析

今天简单的学习了下xml文件的创建和使用SAXReader来解析此类型文件。 在创建前,需要先导包,dom4j,这个是专门读写xml文件的。 首先在创建xml文件前。需要先考虑好,在这个文件中需要...
  • srd1900
  • srd1900
  • 2015年07月07日 21:44
  • 232

android解析json和xml文件的简单应用(二)

这里给出的是android客户端的代码:首先需要访问网络,所以你要添加访问网络的权限。还要声明一个异步任务的类,来执行访问网络并更新数据控件。在解析xml和json我写在一起了。xml是后写的所以要是...

java--通过sax方式解析xml文件的简单实例

1.重写的继承自DefaultHandler的方法,部分代码如下: @Override public void startElement(String uri, String localName,...

使用简单工厂模式,解析XML文件,并将数据显示在treeview上

题目:饮料代理公司商品预定管理        某公司为实现所售商品的有效管理,更好的为客户提供服务,拟定制作一套进销存软件,本例只实现其中的商品预定功能和定单打印,所商品信息如下: ...
  • HideLin
  • HideLin
  • 2012年09月26日 22:18
  • 1554

SAX解析XML文件的简单应用

SAX顺序读取XMl文件时,并非一次性将XML文件读到内存中去,而是一段一段的读到内存中。SAX的解析器是基于事件的模型,解析XML文件时会触发一系列事件。SAX占用内存小、处理灵活,对于手机端的开发...

Dom4j解析xml文件的简单快速用法

1. 介绍使用Dom4j解析xml文件,需要用到的jar包是:dom4j-1.6.1.jar,下载地址:点我前往以读取以下test.xml测试文件为例简单说明其用法: 此文件是WebXml.com....
  • fxjzzyo
  • fxjzzyo
  • 2017年07月09日 19:20
  • 119

简单看Spring源码--对xml文件解析

Spring如何解析xml配置文件? xml配置文件是Spring中极其重要的一部分,让我们一起看一下spring解析xml文件的。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML文件的简单初步解析
举报原因:
原因补充:

(最多只允许输入30个字)