VC遍历解析xml

// 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值