CMarkup与XML(一)

 

最近研究XML比较多,刚刚研究了MSXML,现在再来看看一个比较简单的解析器-CMarkup。以下均是本人从网上搜集的,然后整理到了一起,这应该不算侵权吧,哈哈!

闲话结束,转入正题:

 

Cmarkup是基于压缩文档对象模型(EDOM"Encapsulated" Document Object Model),这是这个简单XML处理器的关键。它的一套XML处理方法和产生的效果与DOM(Document Object Model)是一样的。但是整个DOM有无数的对象类型,而EDOM只定义了一个对象:XML文档,EDOM回到了XML原始的吸引力简单。关于方法的完整文档,请看EDOM Specification

CmarkUp封装了XML文档文本、结构和当前位置。它提供了增加元素、导航和得到元素属性和数据的所有方法。在文档中操作被执行的地方取决于当前位置和当前孩子位置。当前位置允许你增加一个元素到文档中的这个位置,而不需要明确指出增加对象到文档的这点上,在CMarkup的有效生命周期里,对象一直保持着一个用来描述文档的字符串,当你调用GetDoc()可以得到它。 

1. 创建一个XML文档

对于创建一个XML文档,需要实例化一个CMarkup对象,并调用AddElem创建根元素。在这个位置,如果你调用 AddElem("ORDER"),你的文档会简单的装一个空ORDER元素<ORDER/>,然后调用AddChildElem在根元素的下面创建元素 (例如:进入根元素内部,层次表示)。下面的示例代码创建一个XML文档并返回它(的内容)到一个字符串中。

 

这些代码产生了下面的XML,这个根结点是ORDER元素;注意它的开始标签<ORDER> 在开头,结束标签</ORDER>在结尾。当一个元素是在一个父下面(深入或被包含),这个父元素的开始标签要在它之前,结束标签要在它之后。ORDER元素包含一个ITEM元素,而ITEM元素包含了三个字子元素:SNNAMEQTY

<ORDER>

<ITEM>

<SN>132487A-J</SN>

<NAME>crank casing</NAME>

<QTY>1</QTY>

</ITEM>

</ORDER>

如例子中所显示的,你也能够在一个子元素下创建新元素,这需要调用IntoElem 移动你的当前主位置到当前子元素位置,然后你就可以在这下面增加一个子元素了。CMarkup在索引中保持了一个当前位置指针,以保证你的源码更加短和更简单,当导航文件时,相同的逻辑位置也会被使用。

2. 导航XML文档

上面的例子所创建的XML字符串,用SetDoc方法加入到CMarkup对象中能够被解析,你也可以引导它正确的进入被创建的同一个CMarkup对象中,如果你要设置当前位置到文档的开始时,需要调用ResetPos.

在下面的例子中,从csXML字符串生成CMarkup对象后,我们循环ORDER元素下的所有ITEM元素,并得到每个项目的序号和数量。

 

对于我们发现的每个元素,在查询它了子元素之前要调用IntoElem,查询完之后再调用OutOfElem ,当你习惯于这种导航类型时,你将知道,检查你的循环时,要确定每个IntoElem 调用都有一个与之对应的OutOfElem 调用 。

3. 增加元素和属性

上面创建文档的例子中仅创建了一个ITEM元素,现在这个例子是创建多个项目,从前一个内容加裁后,再增加数据源,加上SHIPMENT信息元素中有一个属性,这段代码也演示了你能调用调用IntoElemAddElem来代替AddChildElem,函数调用。虽然这意味着更多的调用,但许多人认为这样更直观。

 

这段代码产生了下面的XML,根元素ORDER包含两个ITEM元素和一个SHIPMENT元素,ITEM元素全都包含SNNAME、和QTY元素,SHIPMENT元素包含一个带有属性类型的POC元素,和NAMETEL子元素。

<ORDER>

<ITEM>

<SN>132487A-J</SN>

<NAME>crank casing</NAME>

<QTY>1</QTY>

</ITEM>

<ITEM>

<SN>4238764-A</SN>

<NAME>bearing</NAME>

<QTY>15</QTY>

</ITEM>

<SHIPMENT>

<POC type="non-emergency">

<NAME>John Smith</NAME>

<TEL>555-1234</TEL>

</POC>

</SHIPMENT>

</ORDER>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值