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...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

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

maven pom.xml文件 简单解析

1.POM代表项目对象模型。 它是 Maven 中工作的基本单位,这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。 POM 包含的项目是使用 Maven 来构建的,它...

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

原创:Js解析xml文件并简单实现省市区级联菜单(并解决各浏览器兼容性问题). 前不久日本发生了一场惹人非议的地震中,因此也引发了中国购买食盐的狂热份子!然后又因发了一场退盐事件.然后80,90后们并...

简单地解析XML文件

1.SAX解析XML文档的过程: 1>创建事件处理程序; 2>创建SAX解析器; 3>将事件处理程序分配给解析器 4>将文档进行解析,将每个事件发送给处理程序; 如: SAXP...

简单的DOM解析XML文件,并实现增,删,改,查的操作

JAVA项目文件 package dom_jiexi; import java.io.File; import java.io.IOException; import javax.xml.par...

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

Spring如何解析xml配置文件? xml配置文件是Spring中极其重要的一部分,让我们一起看一下spring解析xml文件的。

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

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

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

前不久日本发生了一场惹人非议的地震中,因此也引发了中国购买食盐的狂热份子!然后又因发了一场退盐事件.然后80,90后们并没有参与其中,说明掌握科学知识的重要性.作为一名合格的大学生应该时刻保持清醒的头...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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