㈠ 怎样用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); // newstrbuf = 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;}//读取xmlpDoc->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这个值