c語言xml怎麼用,c操作xml文件

本文目錄一覽:

c語言如何調用xml的介面函數

/***************

?xml version=”1.0″ encoding=”utf-8″?

Cases

  case

    No001/No

    CopyFile src=”C:\test.txt” dest=”D:\test.txt”/CopyFile

  /case

  

  case

    No002/No

    DelFileC:\test.txt/DelFile

  /case

/Cases

*******************/

// 我們用MFC來讀取上述xml,代碼如下:

 

void ReadXml(CString strXmlPath)

{

    MSXML2::IXMLDOMDocumentPtr pDoc;

    ::CoInitialize(NULL);

    HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 

    

    if (!SUCCEEDED(hr)) 

    {  

        MessageBox(_T(“創建DOMDocument對象失敗。\n請檢查運行環境”), _T(“錯誤”), MB_ICONERROR); 

        return;

    }

    // 讀取xml

    pDoc-put_async(VARIANT_FALSE);

    VARIANT_BOOL bhr = pDoc-load((_variant_t)strXmlPath);

    if (bhr != VARIANT_TRUE) {

        MessageBox(_T(“無法正確讀取xml文件”), _T(“錯誤”), MB_ICONERROR);

        return;

    }

    // 根節點取得

    MSXML2::IXMLDOMElementPtr root = pDoc-documentElement;

    // 取得根節點的名字

    _variant_t strRootName = root-nodeName;

    _bstr_t wstrRootName(strRootName.bstrVal);

    MSXML2::IXMLDOMNodeListPtr nodeList = root-GetchildNodes();//cases

    

    // 解析cases的子節點

    ReadCases(nodeList);

}

 

void ReadCases(MSXML2::IXMLDOMNodeListPtr nodeList)

{

    int ilength = nodeList-Getlength();

    for (int nodeCount = 0; nodeCount  ilength; nodeCount++) {

        MSXML2::IXMLDOMNodePtr nodePtr = nodeList-nextNode();

        _variant_t strNodeName = nodePtr-GetnodeName();

        _variant_t strNodeValue = nodePtr-GetnodeValue();

 

        // 讀取case節點下的子節點

        ReadCase(nodePtr-GetchildNodes());

    }

}

void ReadCase(MSXML2::IXMLDOMNodeListPtr nodeList)

{

    CString strLogInfo;

    strLogInfo.Empty();

    CString strNo;              // case編號

    CString strSrcFile;         // 源文件

    CString strDestFile;        // 目標文件

    for (int nodeCount = 0; nodeCount  nodeList-Getlength(); nodeCount++)

    {

        MSXML2::IXMLDOMNodePtr nodePtr = nodeList-nextNode();

        _variant_t strCaseNodeName = nodePtr-GetnodeName();

        _variant_t strCaseNodeValue = nodePtr-Gettext();

        BSTR bStrTemp = strCaseNodeName.bstrVal;

        CString strTemp = CString(bStrTemp);

        SysFreeString(bStrTemp);

        CString strNodeName = strTemp;

        //  節點的值,如何取得?

        if (0 == strNodeName.CompareNoCase(_T(“NO”)))

        {

            strNo = (BSTR)strCaseNodeValue.pbstrVal;

            

            // 取得的值可以列印出來

            printf(strNo);

        }

        // 節點有屬性值,該怎麼處理?

        else if (0 == strNodeName.CompareNoCase(_T(“CopyFile”)))

        {

            strSrcFile.Empty();

            strDestFile.Empty();

            // 取得節點的屬性值

            MSXML2::IXMLDOMNamedNodeMapPtr pDOMAttrList= nodePtr-Getattributes();

            for (int j = 0; j  pDOMAttrList-Getlength(); j++)

            {

                MSXML2::IXMLDOMNodePtr pDOMAttr= pDOMAttrList-Getitem(j); 

                // 取得源文件路徑

                if (CompareNoCase((char*)pDOMAttr-GetnodeName(), _T(“src”)))

                {

                    strSrcFile = pDOMAttr-GetnodeTypedValue();

                    // 取得目標文件路徑

                } else if (CompareNoCase((char*)pDOMAttr-GetnodeName(), _T(“dest”)))

                {

                    strDestFile =pDOMAttr-GetnodeTypedValue();

                }

                

                CopyFile(strSrcFile, strDestFile, FALSE);

            }

            else if (0 == strNodeName.CompareNoCase(_T(“DelFile”)))

            {

                strDestFile.Empty();

                strDestFile = CString((BSTR)strCaseNodeValue.pbstrVal);

                

                DeleteFile(strDestFile);

            } 

        }

    }

 // 為了能夠讓MFC認識MSXML2,我們需要引入相應的dll,代碼如下;

#import “msxml4.dll”

如何用C語言實現對xml文件的加密

把xml就當做一個普通的二進位文件

然後隨便找一個加密演算法

按照位元組讀入xml文件

然後按照加密演算法進行加密轉換,輸出到目標文件就可以了

簡單的

可以用異或方式。

怎麼用C語言寫一個簡單的XML文件

用VC吧,下面有一個例子,你參照下:

void CreateXml()

{

    CoInitialize(NULL);

    // 創建文檔

    MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL;

    //創建DOMDocument對象

    HRESULT hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));

    if (!SUCCEEDED(hr))

    {

        return;

    }

    // Create the Processing Instruction

    MSXML2::IXMLDOMProcessingInstructionPtr pXMLProc = NULL;

    pXMLProc = pXMLDoc-createProcessingInstruction(“xml”, “version=’1.0′ encoding=’UTF-8′”);

    

    _variant_t vNullVal;

    vNullVal.vt = VT_NULL;

    pXMLDoc-insertBefore(pXMLProc, vNullVal);

    // 創建根結點

    _variant_t varNodeType((short)MSXML2::NODE_ELEMENT);

    MSXML2::IXMLDOMNodePtr pXMLNodeRoot= NULL; 

    pXMLNodeRoot = pXMLDoc-createNode(varNodeType, _T(“Cases”), _T(“”));

    // 添加根結點

    pXMLDoc-appendChild(pXMLNodeRoot);

    // 創建並添加下級結點

    MSXML2::IXMLDOMNodePtr pXMLNodeNode= NULL; 

    pXMLNodeNode = pXMLNodeRoot-appendChild(pXMLDoc-createElement(_T(“Case”)));

    // 創建下級元素結點

    MSXML2::IXMLDOMElementPtr pXMLEle = NULL;

    pXMLEle = pXMLDoc-createElement(_T(“CopyFile”));

    // 創建並設置下級結點屬性

    MSXML2::IXMLDOMAttributePtr pXMLAttr = NULL;

    pXMLAttr = pXMLDoc-createAttribute(_T(“src”));

    pXMLAttr-nodeTypedValue = “C:\\test.txt”;

    pXMLEle-attributes-setNamedItem(pXMLAttr);

    pXMLAttr = pXMLDoc-createAttribute(_T(“dest”));

    pXMLAttr-nodeTypedValue = “D:\\Test.txt”;

    pXMLEle-attributes-setNamedItem(pXMLAttr);

    // 添加元素結點

    pXMLNodeNode-appendChild( pXMLEle);

    MSXML2::IXMLDOMElementPtr pXMLEle1 = NULL;

    pXMLEle1 = pXMLDoc-createElement(_T(“DelFile”));

    pXMLEle1-appendChild(pXMLDoc-createTextNode(“C:\\test.txt”));

    // 添加元素結點

    pXMLNodeNode-appendChild( pXMLEle1);

  

    // 保存文檔

    pXMLDoc-save(_T(“d:\\Test.xml”));

}

 

效果如下:

?xml version=”1.0″ encoding=”UTF-8″ ? 

Cases

    Case

        CopyFile src=”C:\test.txt” dest=”D:\Test.txt” / 

        DelFileC:\test.txt/DelFile 

    /Case

/Cases

為了能夠讓MFC認識MSXML2,我們需要引入相應的dll,代碼如下;

#import “msxml4.dll”

原創文章,作者:YUJR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146043.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YUJR的頭像YUJR
上一篇 2024-10-29 18:59
下一篇 2024-10-29 18:59

相關推薦

發表回復

登錄後才能評論