C++Öд¦ÀíXMLÎļþ
д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 <msXML2.h>
#import <msXML4.dll>
Í·ÎļþºÍdll¿â¡£Ê²Ã´£¿ÔÚÄÄÀï¼Ó£¿Í·Îļþ»òÕßc/cppÎļþ°¡£¬ÄÄÀïºÏÊÊ·ÅÄĶù¡£
È»ºó¾Í¿ªÊ¼±à³ÌÁË£¬Ïȶ¨ÒåÁ½¸ö±ØÓõıäÁ¿£º
IXMLDOMDocumentPtr XMLFile = NULL;
IXMLDOMElement* XMLRoot = NULL;
ΪʲôÊDZØÓõģ¿¡¡¡¡º¹£®£®£®
µÚÒ»²½µ±È»Êdzõʼ»¯COM£º
if(FAILED(CoInitialize(NULL))) ....
½ÓÏÂÀ´³õʼ»¯XMLFile¶ÔÏó£º
if(FAILED(XMLFile.CreateInstance("MsXML2.DOMDocument.4.0"))) ...
È»ºó¾Í¿ÉÒÔ¼ÓÔØXMLÎļþÁË£º
_variant_t varXML(L"C: est.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)
{
//do something
}
È¡µÃµ±Ç°elementµÄÃû³Æ£º
BSTR nodeName;
currentNode->get_nodeName(&nodeName);
È¡µÃµ±Ç°elementµÄÒ»¸öattribute£¨¼ÙÉè
Ïà¹ØÎĵµ£º
1¡¢×÷ÓÃ
ΪÁËÔÚʵÏÖ¶à̬µÄʱºò²»Ôì³ÉÄÚ´æÐ¹Â¶,
Èç¹û»ùÀàÎö¹¹º¯Êýǰ²»¼Óvitual£¬ÅÉÉúÀà¶ÔÏó±»Ïú»Ùºó£¬Ö»»áµ÷ÓûùÀàµÄÎö¹¹º¯Êý£¬¶ø²»»áÈ¥µ÷ÓÃÅÉÉúÀàµÄÎö¹¹º¯Êý¡£
2¡¢¶ÔÓÚÕý³£µÄº¯Êý£¬Èç¹û»ùÀàÖÐÉùÃ÷Ϊvirtual£¬ÔòÅÉÉúÀà¿ÉÒÔ²»ÓÃÔÙдvirtual
// CPPTest.cpp : Defines the entry point for the console application.
// ......
¡¡¡¡Ò»¡¢ XML ¼ò½é
¡¡¡¡XML£¨Xtensible Markup Language£¬¼´À©Õ¹±ê¼ÇÓïÑÔ£©µÄ·¢Õ¹ÆðÔ´ÓÚ1996Äê¡£µ±Ê±£¬³ö°æ½ç¾ÞÍ·ºÍWebÒµÄÚÈËÊ¿¾¹ý¹²Í¬ÌÖÂÛ£¬Ìá³öÁË´´½¨SGML£¨Standard Generalized Markup Language£¬¼´±ê׼ͨÓñêʶÓïÑÔ£©×Ó¼¯£¨HML£©µÄ½¨Òé¡£¸Ã×Ó¼¯×¨ÓÃÓÚWeb£¬¾ßÓпÉÀ©Õ¹£¨»ò¿ÉÀ©³ä£©ÐÔ£¬²¢ÇÒÄÜÀûÓýṹ»¯±ê¼ÇÓïÑÔµÄËùÓÐ ......
ÔÚXMLÎĵµÖеÄËùÓÐÎı¾¶¼»á±»½âÎöÆ÷½âÎö¡£
Ö»ÓÐÔÚCDATA²¿¼þÖ®ÄÚµÄÎı¾»á±»½âÎöÆ÷ºöÂÔ¡£
½âÎöÊý¾Ý
XML ½âÎöÆ÷ͨ³£Çé¿öÏ»ᴦÀíXMLÎĵµÖеÄËùÓÐÎı¾¡£
µ±XMLÔªËØ±»½âÎöµÄʱºò£¬XMLÔªËØÄÚ²¿µÄÎı¾Ò²»á±»½âÎö:
<message>This text is also parsed</message>
XML½âÎöÆ÷ÕâÑù×öµÄÔÒòÊÇXMLÔªËØÄÚ²¿¿ÉÄÜ» ......
/*
* XMLTool.cpp ÅäÖÃÎļþ½âÎö¶¯Ì¬¿â×ÊÔ´Îļþ
* Ö÷ÒªÊä³öº¯Êý½Ó¿Ú·Ö±ðʵÏÖ¶ÔÅäÖÃÎļþµÄ¶ÁÈ¡ºÍдÈ룬Õë¶Ô½á¹û¼¯µÄ¸´ÖÆÇå¿Õ£¬ºÍÁ½¸ö×Ö·û´®´¦Àíº¯Êý
* ¶ÁÈ¡ÅäÖÃÎļþ½Ó¿Ú £ºint ReadXMLFile(XML_Node_Vector *XmlNodeVector, string filepath);
* Ð´È ......