導航:首頁 > 文件管理 > c讀取xml配置文件

c讀取xml配置文件

發布時間:2022-12-31 15:00:14

㈠ 怎樣用vc++讀寫xml文件

用微軟的 DOM,
MSXML4
//引入msxml4.dll
#import "C:/WINNT.0/system32/msxml4.dll"

//創建XMLDOMDocument指針
MSXML2::IXMLDOMDocumentPtr pXMLDoc;

// 初始化COM介面
::CoInitialize(NULL);
// 通過智能指針創建一個解析器的實例
HRESULT hr;
hr =pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
//載入文件
pXMLDoc->load("f://he.xml");
//在樹中查找名為City的節點,"//"表示在任意一層查找
MSXML2::IXMLDOMElementPtr childNode ;
childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc->selectSingleNode("//AUTHOR"));
//得到節點類型
MSXML2::DOMNodeType nodeType;
childNode->get_nodeType(&nodeType);
//節點名稱
BSTR var;
CString name;
childNode->get_nodeName(&var);
name = (char*)(_bstr_t)var;
//節點值
VARIANT varVal;
childNode->get_nodeTypedValue(&varVal);
CString strValue = (char*)(_bstr_t)varVal;
讀屬性:
//節點屬性,放在鏈表中
MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem;
childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc->selectSingleNode("//NUM"));

childNode->get_attributes(&pAttrs);
long nCount ;
pAttrs->get_length(&nCount);
for(int i = 0 ; i < nCount ; i++)
{
pAttrs->get_item(i,&pAttrItem);
//我們可以通過函數get_nodeName,get_nodeTypedValue得到屬性名和屬性值
//也可以直接得到
CString strAttrName = (char*)(_bstr_t)pAttrItem->nodeName;
CString strAttrValue = (char*)(_bstr_t)pAttrItem->nodeTypedValue;
}

另外
可以用MSXML DOM

創建一個文檔對象的過程。
HRESULT hr;
IXMLDomDocument* pXMLDoc;
IXMLDOMNode* pXDN;
Hr=CoInitialize(NULL); //COM的初始化

hr=CoCreateInstance(CLSID_DOM Document,NULL,CLSCTX_INPPROC_SERVER,
IID_IXMLDOMDocument,(void**) &pXMLDoc);
hr=pXMLDoc->QueryInterface (IID_IXMLDOMNode,(void**)&pXDN);
使用文檔中的createElement方法來創建一個節點裝載和保存XML文件。通過load或者是loadXML方法可以從一個指定的URL來裝載一個XML文檔Save方法是用來把文檔保存到一個指定的位置,用getElementsByTagName獲得制定節點數據

二、
// 創建對象
CoInitialize(NULL); // 初始化COM
// 創建解析器實例
CComPtr<IXMLDOMDocument> spXMLDOM;
BSTR bstrItemText;
// long value;
CString strbuf;
HRESULT hr=spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));
spXMLDOM->put_async(VARIANT_FALSE);
spXMLDOM->put_validateOnParse(VARIANT_FALSE);
spXMLDOM->put_resolveExternals(VARIANT_FALSE);
spXMLDOM->put_preserveWhiteSpace(VARIANT_TRUE);
_bstr_t path = _bstr_t(xmlPath);
// 裝載XML文檔。
hr=spXMLDOM->load(path);
// 1、讀取裡面全部文本
spXMLDOM->get_text(&bstrItemText); // new
strbuf = bstrItemText; // new
// 2、讀取一個節點
_bstr_t bstrSS("paragraph");
CComPtr<IXMLDOMNodeList> spParagraphs;
spParagraphs=spXMLDOM->getElementsByTagName(bstrSS); //搜索"Paragrah"
//是否正確的得到了指向IDOMNodeList的指針。
hr = spParagraphs->get_length(&value); //得到所包含的NODE節點的個數
if(SUCCEEDED(hr))
...{
spParagraphs->reset();
for(int ii=0; ii<value; ii++)
...{
CComPtr<IXMLDOMNode> spParagraph;
//得到具體的一個NODE節點
// hr = spParagraphs->get_item(ii,&spParagraph);

spParagraph = spParagraphs->nextNode();
if(SUCCEEDED(hr))
...{
spParagraph->get_text(&bstrItemText); //得到該節點相關的文本信息
strbuf += bstrItemText;
strbuf += " ";
}
}
}

㈡ 如何通過讀取XML配置文件導入Excel文件到數據中

1.首先,我們正常使用Excel的另存為,看看能否順利地直接另存為XML文件。

方法:

點擊Excel左上角按鈕,在彈出的選項中,點擊「另存為」

或者直接在Excel中按下快捷鍵F12

㈢ 用C語言讀寫xml文件

都是文本格式的,我想與讀txt的區別在於兩種文件的組織方式不一樣而已,xml應該理解為受一種格式限制的文本文件,按照這些格式多做一些邏輯處理就行吧

㈣ C++如何操作XML配置文件

<?xmlversion="1.0"encoding="utf-8"?>
<Cases>
<case>
<No>001</No>
<CopyFilesrc="C: est.txt"dest="D: est.txt"></CopyFile>
</case>

<case>
<No>002</No>
<DelFile>C: est.txt</DelFile>
</case>
</Cases>

我們用C++來讀取上述xml,代碼如下:

voidCTestToolsDlg::ReadXml(CStringstrXmlPath)
{
MSXML2::IXMLDOMDocumentPtrpDoc;
::CoInitialize(NULL);
HRESULThr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));

if(!SUCCEEDED(hr))
{
MessageBox(_T("創建DOMDocument對象失敗。 請檢查運行環境"),_T("錯誤"),MB_ICONERROR);
return;
}
//讀取xml
pDoc->put_async(VARIANT_FALSE);
VARIANT_BOOLbhr=pDoc->load((_variant_t)strXmlPath);

if(bhr!=VARIANT_TRUE){
MessageBox(_T("無法正確讀取xml文件"),_T("錯誤"),MB_ICONERROR);
return;
}

//根節點取得
MSXML2::IXMLDOMElementPtrroot=pDoc->documentElement;
//取得根節點的名字
_variant_tstrRootName=root->nodeName;
_bstr_twstrRootName(strRootName.bstrVal);
MSXML2::IXMLDOMNodeListPtrnodeList=root->GetchildNodes();//cases

//解析cases的子節點
ReadCases(nodeList);
}

voidCTestToolsDlg::ReadCases(MSXML2::IXMLDOMNodeListPtrnodeList)
{
intilength=nodeList->Getlength();
for(intnodeCount=0;nodeCount<ilength;nodeCount++){
MSXML2::IXMLDOMNodePtrnodePtr=nodeList->nextNode();
_variant_tstrNodeName=nodePtr->GetnodeName();
_variant_tstrNodeValue=nodePtr->GetnodeValue();

//讀取case節點下的子節點
ReadCase(nodePtr->GetchildNodes());
}
}

voidCTestToolDlg::ReadCase(MSXML2::IXMLDOMNodeListPtrnodeList)
{
CStringstrLogInfo;
strLogInfo.Empty();
CStringstrNo;//case編號
CStringstrSrcFile;//源文件
CStringstrDestFile;//目標文件
for(intnodeCount=0;nodeCount<nodeList->Getlength();nodeCount++)
{
MSXML2::IXMLDOMNodePtrnodePtr=nodeList->nextNode();
_variant_tstrCaseNodeName=nodePtr->GetnodeName();
_variant_tstrCaseNodeValue=nodePtr->Gettext();
BSTRbStrTemp=strCaseNodeName.bstrVal;
CStringstrTemp=CString(bStrTemp);
SysFreeString(bStrTemp);
CStringstrNodeName=strTemp;
//節點的值,如何取得?
if(0==strNodeName.CompareNoCase(_T("NO")))
{
strNo=(BSTR)strCaseNodeValue.pbstrVal;

//取得的值可以列印出來
printf(strNo);
}

//節點有屬性值,該怎麼處理?
elseif(0==strNodeName.CompareNoCase(_T("CopyFile")))
{
strSrcFile.Empty();
strDestFile.Empty();
//取得節點的屬性值
MSXML2::=nodePtr->Getattributes();
for(intj=0;j<pDOMAttrList->Getlength();j++)
{
MSXML2::IXMLDOMNodePtrpDOMAttr=pDOMAttrList->Getitem(j);
//取得源文件路徑
if(CompareNoCase((char*)pDOMAttr->GetnodeName(),_T("src")))
{
strSrcFile=pDOMAttr->GetnodeTypedValue();
//取得目標文件路徑
}elseif(CompareNoCase((char*)pDOMAttr->GetnodeName(),_T("dest")))
{
strDestFile=pDOMAttr->GetnodeTypedValue();
}

CopyFile(strSrcFile,strDestFile,FALSE);
}
elseif(0==strNodeName.CompareNoCase(_T("DelFile")))
{
strDestFile.Empty();
strDestFile=CString((BSTR)strCaseNodeValue.pbstrVal);

DeleteFile(strDestFile);
}
}
}

為了能夠讓C++認識MSXML2,我們需要引入相應的dll,代碼如下;#import "msxml4.dll"

㈤ c語言怎麼載入自己寫的配置文件

我是這么做的,比如 ini 里以 #注釋,以=表示賦值
#
# Note

#
aaa=bbb

我從ini里一行一行讀出來,如果第一個字母是#,就忽略
否則就從 line_of_file 里查找 「=」字元,(去掉行末'\n'換行符)
=之前的就是參數名,=之後的就是參數值(去掉空格,tab)(用strncpy)

㈥ 用c語言讀取xml文件中的變數

我這邊有c++編寫的讀取xml中變數的類.(是用一個工具生成的代碼,針對特定格式的XmL文件)
呵呵,如果你用c寫而不能用cpp文件的話,我就不能幫你了.

㈦ C語言 如何讀取xml文件中的數據並存入一個結構體中

利用com、
用xml的dll就可以了,不多說了,具體再不懂再問我把。
我工作也有解析xml文件的 呵呵

㈧ XML文件內容如何讀取(C或C++)

可以用微軟的IXMLDOMDocument2, 也可以用CMarkup,CMarkup可以在網上搜他怎麼用,VS不自帶的,要自己在網上下載代碼。內感覺CMarkup更容易操作。注意容一點就是假如在一個根element下有多個子element,要注意讀子element的順序,從上往下讀,不能從下往上讀,它會讀不到。

以CMarkup為例:

CMarkup readXML;

if( !readXML.load(xml文件名);
return;

readXML.FindElem("class");
這時候可以用reaXML.GetData()取到132這個值

閱讀全文

與c讀取xml配置文件相關的資料

熱點內容
如何修改數據上年結轉 瀏覽:6
win7一直配置文件重啟 瀏覽:124
佳能ir2525i網路掃描 瀏覽:283
win10指紋無法識別 瀏覽:646
jsp中怎麼引入js文件 瀏覽:925
文件名構成部分 瀏覽:484
興國互聯網app有哪些 瀏覽:475
北京時間票房多少票房統計數據 瀏覽:750
探探文件夾是哪個 瀏覽:429
如何分類微信文件 瀏覽:446
城市天際線win10 瀏覽:813
運動APP跑步如何抓作弊 瀏覽:57
微信中秋節動態祝福語 瀏覽:703
練英語的網站哪個好 瀏覽:894
科來網路分析系統報價 瀏覽:437
哪裡可以上傳自己的php網站 瀏覽:373
安卓手機如何打開zx文件 瀏覽:531
app攻擊是什麼 瀏覽:888
app上有把鎖是什麼意思 瀏覽:611
如何用c語言編程五角星 瀏覽:183

友情鏈接