设为首页收藏本站language 语言切换
查看: 1266|回复: 0
收起左侧

[.NET]:在Managed C++中处理XML

[复制链接]
发表于 2010-2-25 10:24:17 | 显示全部楼层 |阅读模式
<p >在这篇文章中,我将用.NET框架来处理XML。<p >使用.NET中具备XML功能所带来的优越性包括:<p >● 无需任何安装、配置或重新分配,反正你的apps也是需要这个框架的,而只要你有这个框架,就万事俱备了;<p >● 编码更简单,因为你不是在处理COM。比如,你不必要调用CoInitialize() 和 CoUninitialize();<p >● 具有比MSXML4更多的功能。<p ><center><font color="#000099"><strong>XML实例</strong></font></center><p >我将用下面的例子来加以说明:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; &lturchaseOrder&gt;&lt;Customer id=&quot;123&quot;/&gt;&lt;Item SKU=&quot;1234&quot; Price=&quot;4.56&quot; Quantity=&quot;1&quot;/&gt;&lt;Item SKU=&quot;1235&quot; Price=&quot;4.58&quot; Quantity=&quot;2&quot;/&gt;&lt;/PurchaseOrder&gt;</ccid_code></pre></td></tr></table></ccid_nobr><p ><b>用XmlDocument加载XML</b><p >处理XML的classes放在System::Xml namespace 中。XmlDocument表示一个DOM 文件,即XML被装载的子目录。这和在MSXML4方法中的DOMDocument是一样的。下面是一个简单的Managed C++应用程序,在内存中装入了XML文件:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>#include &quot;stdafx.h&quot;#using &lt;mscorlib.dll&gt;#include &lt;tchar.h&gt;using namespace System;#using &lt;System.Xml.dll&gt;using namespace System::Xml;// This is the entry point for this applicationint _tmain(void){  XmlDocument* xmlDoc = new XmlDocument();  try  {    xmlDoc-&gt;Load(&quot;sample.xml&quot;);    System::Console::WriteLine(&quot;Document loaded ok.&quot; );  }  catch (Exception *e)  {    System::Console::WriteLine(&quot;load problem&quot;);    System::Console::WriteLine(e-&gt;Message);  }  return 0;}</ccid_code></pre></td></tr></table></ccid_nobr><p >#using 语句非常重要。没有它,就会出现一些奇怪的编译错误,如'Xml' : is not a member of 'System' 或 'Xml' : a namespace with this name does not exist. 在C#或VB.NET中,有一个Project,Add References 菜单项目自动为你完成这项工作,但是在C++中,编程者必须自己去完成。你可以在在线帮助中找到class或namespace汇编。<p >另外注意到,在编码中没有象COM方法中那样使用Load()返回值。如果不能加载XML,加载程序将报告异常。<p ><b>文档内容的简单算法</b><p >这里是.NET方式中相应的编码。<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>xmlDoc-&gt;Load(&quot;sample.xml&quot;);double total = 0;System::Console::WriteLine(&quot;Document loaded ok.&quot; );XmlNodeList* items = xmlDoc-&gt;GetElementsByTagName(&quot;Item&quot;);long numitems = items-&gt;Count;for (int i=0;i&lt;numitems;i++){  XmlNode* item = items-&gt;Item(i);  double price =    Double:arse(item-&gt;Attributes-&gt;GetNamedItem(&quotrice&quot;)-&gt;                  get_Value());  double qty =    Double:arse(item-&gt;Attributes-&gt;GetNamedItem(&quot;Quantity&quot;)-&gt;                  get_Value());  total += price * qty;}System::Console::WriteLine(&quoturchase Order total is ${0}&quot;,                           __box(total));</ccid_code></pre></td></tr></table></ccid_nobr><p align="center"><font color="FF0000" >1</font>2<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-4 20:09 , Processed in 0.067584 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表