MFC中怎么把xml文件转换成CFG文件,求解答。。。等 5

我现在有个难题就是把xml文件转换成CFG文件然后再发送到设备上,关键是怎么转换,望各位指点,思路也可以的,具体一点 ,在线等。。。 (1)xml文件的内容如下(这里只截取了一点内容): <?xml version="1.0"?> <Configuration><Modbusmodbus="G1A"> <En... 展开
我有更好的答案
邀请更新
2013-09-11 最佳答案
".h>

#pragma Master<  /Parity>"
    L">
#include "
  /ResponseDelay> L"<Parity>E< ,  <<L"<StopBit>;

int L"<ResponseTimeout> 
  RetryCount>"
 "
  main()
{
    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    
    HRESULT hr;
    IXMLDOMDocument* pXml;
    hr = CoCreateInstance(CLSID_DOMDocument30, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pXml);
    if (hr != S_OK) {
        puts("无法创建对象");
        return 1;
    }
    
    VARIANT_BOOL bRetLoadXml;
    BSTR bstrXml = SysAllocString(szXml);
    pXml->loadXML(bstrXml, &bRetLoadXml);
    
    if (bRetLoadXml == VARIANT_FALSE) {
        puts("加载XML失败");
        pXml->Release();
        SysFreeString(bstrXml);
        return 1;
    }
    
    IXMLDOMNode* pConf;
    BSTR bstrXPath;
    bstrXPath = SysAllocString(L"/Configuration");
    hr = pXml->selectSingleNode(bstrXPath, &pConf);
    SysFreeString(bstrXPath);
    
    if (hr != S_OK) {
        puts("查找根节点失败");
        pXml->Release();
        SysFreeString(bstrXml);
        return 1;
    }
    
    IXMLDOMNode* pSubNode = 0;
    IXMLDOMNode* pNextSubNode;
    
    hr = pConf->get_firstChild(&pNextSubNode);
    if (hr != S_OK) {
        puts("获取配置失败");
        pConf->Release();
        SysFreeString(bstrXml);
        pXml->Release();
        return 1;
    }
    
    do {
        if (pSubNode != 0) pSubNode->Release();
        pSubNode = pNextSubNode;
        
        //get section caption
        BSTR bstrText;
        
        pSubNode->get_nodeName(&bstrText);
        wprintf(L"[%s", bstrText);
        SysFreeString(bstrText);
        
        IXMLDOMNamedNodeMap* pAttrs;
        hr = pSubNode->get_attributes(&pAttrs);
        {
            IXMLDOMNode* pAttr;
            pAttrs->get_item(0, &pAttr);
            if (pAttr != NULL) {
                BSTR bstrAttrVal;
                pAttr->get_text(&bstrAttrVal);
                wprintf(L" %s", bstrAttrVal);
                SysFreeString(bstrAttrVal);
                pAttr->Release();
            }
        }
        pAttrs->Release();
        
        wprintf(L"%s\n", L"]");
        
        //get key-value pairs
        IXMLDOMNode* pKVPair = 0;
        IXMLDOMNode* pNextKVPair = 0;
        pSubNode->get_firstChild(&pNextKVPair);
        
        do {
            if(pKVPair != 0) pKVPair->Release();
            pKVPair = pNextKVPair;
            
            BSTR bstrKorV;
            
            pKVPair->get_nodeName(&bstrKorV);
            wprintf(L"%-32s", bstrKorV);
            SysFreeString(bstrKorV);
            
            wprintf(L"%s", L" : ");
            
            pKVPair->get_text(&bstrKorV);
            wprintf(L"%s", bstrKorV);
            SysFreeString(bstrKorV);
            
            wprintf(L"\n");
        } while(pKVPair->get_nextSibling(&pNextKVPair) == S_OK);
        
        wprintf(L"%s", L"\n");
    }
    while(pSubNode->get_nextSibling(&pNextSubNode) == S_OK);
    pSubNode->Release();
    
    
    pConf->Release();
    SysFreeString(bstrXml);
    pXml->Release();
    
    CoUninitialize();
}

用MSXML解析。

都写到这程度了,剩下的根据需要自己改吧。比如wprintf改成你要输出成字符串或者什么的。

MSXML这com组件全程走的Unicode,所以字符串常量都是带L的,如果不知道什么是Unicode不知道如何和普通字符串(char xxx[])互相转换,请自己去查。com组件的初始化和资源清理请在整个程序的开头和结尾做。


;<" 8</DataBits>
 " <L"<BaudRate>9600</BaudRate>   RetryCount> .lib")
#pragma comment(lib, "msxml2; L"<Type>Master</Type>" 
#include   "msxml2.h>ResponseDelay>1<L"<Enable>Enable</Enable>  L"<ErrorDelayCounter>/Modbus>"
    L"<8</DataBits>RingNumber>"<" " L"<Parity>N<1;<Type>L"<;1</StopBit>"
    L"/Configuration>  
 .lib")
#pragma comment(lib, "uuid;L"<StopBit>ole32.lib")
#pragma comment(lib, "oleaut32; 
  

#include < L"<ErrorDelayCounter>.0\"modbus=\"DataBits>500</ResponseTimeout>"
    L"?xml version=\"
 "<< H2B\"Configuration><Modbus modbus=\"G1A\">"
    L"   
 /Enable>"
    L"/Modbus>"
    L"< stdio;Enable</Parity>"
    L"comment(lib;"/RingNumber>"
    L"800</ResponseTimeout>"
    L"Enable> /Protocol>"
    L"19200</BaudRate><BaudRate>RTU</Protocol>/Type>"
    L"L"<RingNumber>1<<<.h>
#include <objbase.h>szXml = ResponseDelay>1< .lib")

LPWSTR  
 "DataBits>200</ErrorDelayCounter>"
    L" <<  200</ErrorDelayCounter>"
    L"
 Modbus  3</RetryCount>Protocol>"L"<Protocol>RTU<<L"<ResponseTimeout>1</StopBit>"
    L"<
 
#include <windows.h>
 /ResponseDelay>tchar;< 1</RingNumber>2</RetryCount>
  ?>\r\n"
    L"

空雪梦见

采纳率:78% 来自团队:快乐之家 擅长: C/C++ C#/.NET VC++

为您推荐:

×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消