当前位置:编程学习 > XML/UML >>

在Managed C++中处理XML

在这篇文章中,我将用.NET框架来处理XML。

使用.NET中具备XML功能所带来的优越性包括:

● 无需任何安装、配置或重新分配,反正你的apps也是需要这个框架的,而只要你有这个框架,就万事俱备了;

● 编码更简单,因为你不是在处理COM。比如,你不必要调用CoInitialize() 和 CoUninitialize();

● 具有比MSXML4更多的功能。

XML实例


我将用下面的例子来加以说明:

<?xml version="1.0" encoding="utf-8" ?> 

<PurchaseOrder>

<Customer id="123"/>

<Item SKU="1234" Price="4.56" Quantity="1"/>

<Item SKU="1235" Price="4.58" Quantity="2"/>

</PurchaseOrder>


用XmlDocument加载XML

处理XML的classes放在System::Xml namespace 中。XmlDocument表示一个DOM 文件,即XML被装载的子目录。这和在MSXML4方法中的DOMDocument是一样的。下面是一个简单的Managed C++应用程序,在内存中装入了XML文件:

#include "stdafx.h"

#using <mscorlib.dll>

#include <tchar.h>

using namespace System;

#using <System.Xml.dll>

using namespace System::Xml;

// This is the entry point for this application

int _tmain(void)

{

  XmlDocument* xmlDoc = new XmlDocument();

  try

  {

    xmlDoc->Load("sample.xml");

    System::Console::WriteLine("Document loaded ok." );

  }

  catch (Exception *e)

  {

    System::Console::WriteLine("load problem");

    System::Console::WriteLine(e->Message);

  }

  return 0;

}


#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汇编。

另外注意到,在编码中没有象COM方法中那样使用Load()返回值。如果不能加载XML,加载程序将报告异常。

文档内容的简单算法

这里是.NET方式中相应的编码。

xmlDoc->Load("sample.xml");

double total = 0;

System::Console::WriteLine("Document loaded ok." );

XmlNodeList* items = xmlDoc->GetElementsByTagName("Item");

long numitems = items->Count;

for (int i=0;i<numitems;i++)

{

  XmlNode* item = items->Item(i);

  double price =

    Double::Parse(item->Attributes->GetNamedItem("Price")->

                  get_Value());

  double qty =

    Double::Parse(item->Attributes->GetNamedItem("Quantity")->

                  get_Value());

  total += price * qty;

}

System::Console::WriteLine("Purchase Order total is ${0}",

                           __box(total));
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,