我们来自五湖四海,不为别的,只因有共同的爱好,为中国互联网发展出一分力!

C++中处理XML文件

2013年04月28日03:40 阅读: 15934 次

???  写Unmanaged Code在.NET时代成为一种很悲惨的事,当你需要处理XML文件时,这种感觉会变得尤其强烈。FCL中的System.XML多简单啊,连Steve Ballmer都知道怎么用。

??? 事情不会总是那么理想的,如果你要在C/C++程序里处理XML怎么办呢?

??? 选择一:市面上的XML lib还是有几个的,最有名的当然是libXML。我一年前用过,很不错,我还特意写了一份简明教程,后来不知搁哪儿了。

??? 选择二:MS的MSXML,我要介绍的就是这个。

??? 先说一下在MSDN哪里找文档吧,往下看的时候也好有个参考:在Index里打:Windows Media Services 9 Series SDK=>Programming Reference=>Programming Reference (C++)=>XML DOM Interfaces (C++)。什么?Windows Media?呵呵,不错,我觉得这个guide反而是最清楚的,你直接找MSXML,得到的结果,我觉得还没这个好。

??? 在C程序里调用MSXML基本就是一堆COM接口,不过在Visual Studio里操作先要做点简单的设置:

??? 在你的Project里Add References=>COM标签=>Microsoft XML v4.0,5.0其实也有了,但因为是和Office一起发布的,觉得有点怪,不想用,反正也未必用什么很怪异的功能,4.0可以了。

?

??? 然后在加入这两行:

??? #include
??? #import

??? 头文件和dll库。什么?在哪里加?头文件或者c/cpp文件啊,哪里合适放哪儿。

??? 然后就开始编程了,先定义两个必用的变量:

??? IXMLDOMDocumentPtr XMLFile = NULL;
??? IXMLDOMElement* XMLRoot = NULL;

??? 为什么是必用的?  汗...

??? 第一步当然是初始化COM:

??? if(FAILED(CoInitialize(NULL))) ....

??? 接下来初始化XMLFile对象:

??? if(FAILED(XMLFile.CreateInstance("MsXML2.DOMDocument.4.0"))) ...

??? 然后就可以加载XML文件了:

??? _variant_t varXML(L"C:\\test.XML"); //L for unicode
??? VARIANT_BOOL varOut;
??? XMLFile->load(varXML, &varOut);

??? 取得root element:

??? XMLFile->get_documentElement(&XMLRoot))

??? 取得第一级element:

??? IXMLDOMNodeList* XMLChildNodes = NULL;
??? XMLRoot->get_childNodes(&XMLChildNodes);

??? 遍历所有第一级element:

??? IXMLDOMNode* currentNode = NULL;
??? while(!FAILED(XMLChildNodes->nextNode(¤tNode)) && currentNode != NULL)

?

[1]?[2]?[3]?[4]?下一页

分享到: 更多
蓝客门户