用C++编写XML解析器(二)

3 篇文章 0 订阅
上次说道对于XML文件的校验,其实主要是校验标签的闭合性,具体如何做呢?那么我们先考虑一下问题所在:

(1)XML标签的闭合,意味着在单级标签和多级标签间都要闭合,对于单级标签,比如:
<label>abc</label>
<label>xyz</label>
对于多级标签,比如:
<parent>
               <child>abc</child>
               <child>xyz</child>
</parent>
他们有一个共同的特点,就是同名首标签与尾标签相邻,这意味着使用栈来解决将会相当的方便。

(2)XML标签出现的种类不定,对于
<label>abc</label>
<label>xyz</label>
来说,里面只有一种标签就是<label>,而对于
<parent>
               <child>abc</child>
               <child>xyz</child>
</parent>
来说,里面有两种标签,分别为<parent>和<child>,可是没人知道未来我们要解析的XML有多少种标签,就是说栈的大小也是不确定的,如果使用静态栈,设定栈的大小,要么过大浪费了内存,要么过小,产生编译时错误。为了避免这些问题的出现一个比较好的方案是使用STL中的vector来作为栈。
假设XML文档中的内容如下:
<parent>
               <child>abc</child>
               <child>xyz</child>
</parent>
当扫描整个XML文档时发现<parent>标签,放入栈中,栈中情况如下:
----------------------
                                                           |
----------------------
                                                           |
----------------------
           parent                         |
----------------------
当发现<child>标签时,也放入栈中,此时栈中情况如下:
----------------------
                                                           |
----------------------
           child                               |
----------------------
           parent                         |
----------------------
继续向后搜索标签,将发现</child>,此时,用此标签名child与栈顶元素比照,发现相同,则将<child>标签出栈,栈的情况如下,如果发现的尾标签与栈顶标签不同,则可以断定此XML文档不规则。
----------------------
                                                           |
----------------------
                                                           |
----------------------
           parent                         |
----------------------
继续向后搜索标签,将发现<child>,入栈,
----------------------
                                                           |
----------------------
           child                               |
----------------------
           parent                         |
----------------------
继续向后搜索标签,将发现</child>,此时,用此标签名child与栈顶元素比照,发现相同,则将<child>标签出栈,栈的情况如下,如果发现的尾标签与栈顶标签不同,则可以断定此XML文档不规则。
----------------------
                                                           |
----------------------
                                                           |
----------------------
           parent                         |
----------------------
继续向后搜索标签,将发现</parent>,此时,用此标签名child与栈顶元素比照,发现相同,则将<parent>标签出栈,栈的情况如下,如果发现的尾标签与栈顶标签不同,则可以断定此XML文档不规则。
另外,当完全检测完文件后,如果栈中仍有元素没有弹出,则认为此XML文件不规则。

以上就是检测XML是否标准的算法了,后面的文章,将介绍如何建立XML的节点树。


转载:http://blog.sina.com.cn/s/blog_6ce09de90100o4ai.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值