// blxml.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <tchar.h>
#include <atlstr.h>
#import <msxml3.dll>
//using namespace MSXML2;
using namespace std;
void ProcessNode(MSXML2::IXMLDOMNodePtr spNode)
{
std::cout << "nodeName: " << spNode->nodeName;
if (spNode->nodeType == NODE_ATTRIBUTE || spNode->nodeType == NODE_TEXT)
std::cout << "\tnodeValueb: " << _bstr_t(spNode->nodeValue);
std::cout << std::endl;
CString hh=(char*)(_bstr_t)spNode->nodeName;
if (hh=="xNum")
{
VARIANT varVal;
spNode->get_nodeTypedValue(&varVal);
CString strValue = (char*)(_bstr_t)varVal;
std::cout << "\tnodeValuegg: " << strValue;
std::cout << std::endl;
//CString ss=(char*)(_bstr_t)spNode->nodeValue;
}
// if (spNode->nodeName == "fontSize")
if (spNode->nodeType == NODE_ELEMENT)
{
MSXML2::IXMLDOMNamedNodeMapPtr spNameNodeMap = spNode->attributes;
for (long i = 0; i != spNameNodeMap->length; ++i) //遍历节点属性
ProcessNode(spNameNodeMap->item[i]);
MSXML2::IXMLDOMNodeListPtr spNodeList = spNode->childNodes;
for (long i = 0; i != spNodeList->length; ++i) //遍历子节点
ProcessNode(spNodeList->item[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
//读取XML
MSXML2::IXMLDOMDocumentPtr spXMLDoc;
spXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
spXMLDoc->load(L"11.xml");
MSXML2::IXMLDOMElementPtr spRoot = spXMLDoc->documentElement; //根节点
MSXML2::IXMLDOMNodeListPtr spNodeList = spRoot->childNodes;
for (long i = 0; i != spNodeList->length; ++i) //遍历子节点
ProcessNode(spNodeList->item[i]);
getchar();
//写入XML
//spRoot->selectSingleNode(L"/root/node1")->text = L"newText";
//spRoot->selectSingleNode(L"/root/node2/childnode1/@attrib1")->nodeValue = L"newValue";
//MSXML2::IXMLDOMNodePtr spNewNode = spRoot->selectSingleNode(L"/root/node2")->appendChild(
// spXMLDoc->createNode(_variant_t(NODE_ELEMENT), L"childnode3", L"")
// ); //给node2创建新子节点childnode3
//spNewNode->text = L"childtext2";
//MSXML2::IXMLDOMElementPtr spEle = spNewNode;
//spEle->setAttribute(L"attrib1", _variant_t(L"value1")); //添加新属性
//spXMLDoc->save(_variant_t(L"stocks.xml"));
//spNewNode.Release();
//spEle.Release();
spNodeList.Release();
spRoot.Release();
spXMLDoc.Release();
CoUninitialize();
system("pause");
return 0;
}
参考链接:
http://www.cnblogs.com/lingyun1120/archive/2011/11/02/2232709.html