导航:首页 > 文件管理 > 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配置文件相关的资料

热点内容
小米如何取消wifi和数据同时使用 浏览:347
微信数据6个g怎么清理 浏览:533
找厂房去哪个app 浏览:881
linuxmini 浏览:997
如何找编程类的工作 浏览:286
jsp从mysql读取时间 浏览:680
有什么app可以存app 浏览:603
游戏编程从哪里学的 浏览:738
win8文件布局 浏览:308
数据存储参数配置文件 浏览:122
面膜去哪个网站买好 浏览:627
天下游旧版本 浏览:622
iphone6按键震动 浏览:528
u盘没有显示怎么打开文件夹 浏览:13
win7升级win10激活失败 浏览:914
win10系统文件缺失介质修复 浏览:900
怎么样系统升级 浏览:518
魔客吧传奇网站模板 浏览:365
一段代码解决html多浏览器兼容 浏览:803
淘车大师app官方下载 浏览:953

友情链接