㈠ 怎樣用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這個值