求一本关于C++访问XML的书? 谁知道C++访问XML的书啊?告知一二。想学XML可就找不到书。有知道的告知书名也行。或学习C++访问XML的途径也可。谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 tinyxml 你指的是解析XML文件吗?DOM MSXML, CMarkup 读写XML不用去专门看书吧,百度试着搜下:pugixml教程 repidxml 这还需要书啊,随便一搜就来了 以前自己写的读写XML配置档的:CString ::ReadSingleNodeXml(CString sec,CString key){ CoInitialize(NULL); BSTR strv=L""; CString strdir=_T(""); CString selnodecstr=_T(""); CComPtr<IXMLDOMDocument> spXmldoc; HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0"); if(SUCCEEDED(hr)) { VARIANT_BOOL isSuccessFul; GetAppPath(strdir); strdir=strdir+_T("\\Program\\aConfig.xml"); CComVariant varXmlFile(strdir); spXmldoc->put_async(VARIANT_FALSE); HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul); if(isSuccessFul==VARIANT_TRUE) { CComBSTR bstrXml; CComPtr<IXMLDOMElement> spRoot=NULL; hr = spXmldoc->get_documentElement(&spRoot); spRoot->get_xml(&bstrXml); CComPtr<IXMLDOMNode> spTheNode=NULL; selnodecstr=_T("/aConfig/")+sec+_T("/")+key; spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode); if (spTheNode!=NULL)//节点未找到 { spTheNode->get_text(&strv); } spRoot.Release(); bstrXml.Empty(); } varXmlFile.ClearToZero(); } spXmldoc.Release(); CoUninitialize(); return (CString)strv;}int ::WriteSingleNodeXml(CString sec,CString key,CString val){ CoInitialize(NULL); int result=1; CString strdir=_T(""); CString selnodecstr=_T(""); CComPtr<IXMLDOMDocument> spXmldoc; HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0"); if(SUCCEEDED(hr)) { VARIANT_BOOL isSuccessFul; GetAppPath(strdir); strdir=strdir+_T("\\Program\\aConfig.xml"); CComVariant varXmlFile(strdir); spXmldoc->put_async(VARIANT_FALSE); HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul); if(isSuccessFul==VARIANT_TRUE) { CComBSTR bstrXml; CComPtr<IXMLDOMElement> spRoot=NULL; CComPtr<IXMLDOMElement> spTheElem=NULL; CComPtr<IXMLDOMNode> spNewNode=NULL; CComPtr<IXMLDOMNode> spTheNode=NULL; hr = spXmldoc->get_documentElement(&spRoot); spRoot->get_xml(&bstrXml); selnodecstr=_T("/aConfig/")+sec+_T("/")+key; spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode); if (spTheNode!=NULL)//节点未找到 { spTheNode->put_text(::SysAllocString(val)); spXmldoc->save(varXmlFile); //保存xml。 result=0; } else { spXmldoc->createElement(::SysAllocString(key),&spTheElem); spTheElem->put_text(::SysAllocString(val)); spRoot->selectSingleNode(::SysAllocString(_T("/SaejongConfig/")+sec),&spTheNode); spTheNode->appendChild(spTheElem,&spNewNode); spXmldoc->save(varXmlFile); //保存xml。 result=0; } spRoot.Release(); bstrXml.Empty(); } varXmlFile.ClearToZero(); } spXmldoc.Release(); CoUninitialize(); return result;} 关于directshow的小问题 再散散分,希望大家支持~ 学习编程最重要的是什么? 常见到的一些 .C 文件怎么在 VC 做的工程中使用 有高手研究过:通过获取硬盘信息而取得文件目录列表吗?请进来指导! MDI如何得到mainframe的client的大小 如何设置光标形状 看到 ado 好烦,还是 odbc 简单多了,到底ado 有什么好处呀? 小弟初来找组织 重叠I/O模型的 发送会影响 接收吗,何时发送??? 14年后再来,曾经活跃在VC版块的老码农 向各位大佬求助MFC中断言失败问题
CString ::ReadSingleNodeXml(CString sec,CString key)
{
CoInitialize(NULL);
BSTR strv=L"";
CString strdir=_T("");
CString selnodecstr=_T("");
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul; GetAppPath(strdir);
strdir=strdir+_T("\\Program\\aConfig.xml");
CComVariant varXmlFile(strdir); spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CComBSTR bstrXml;
CComPtr<IXMLDOMElement> spRoot=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
spRoot->get_xml(&bstrXml);
CComPtr<IXMLDOMNode> spTheNode=NULL;
selnodecstr=_T("/aConfig/")+sec+_T("/")+key; spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode);
if (spTheNode!=NULL)//节点未找到
{
spTheNode->get_text(&strv);
}
spRoot.Release();
bstrXml.Empty();
}
varXmlFile.ClearToZero();
}
spXmldoc.Release();
CoUninitialize();
return (CString)strv;
}
int ::WriteSingleNodeXml(CString sec,CString key,CString val)
{
CoInitialize(NULL);
int result=1;
CString strdir=_T("");
CString selnodecstr=_T("");
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul; GetAppPath(strdir);
strdir=strdir+_T("\\Program\\aConfig.xml");
CComVariant varXmlFile(strdir); spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CComBSTR bstrXml;
CComPtr<IXMLDOMElement> spRoot=NULL;
CComPtr<IXMLDOMElement> spTheElem=NULL;
CComPtr<IXMLDOMNode> spNewNode=NULL;
CComPtr<IXMLDOMNode> spTheNode=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
spRoot->get_xml(&bstrXml);
selnodecstr=_T("/aConfig/")+sec+_T("/")+key; spRoot->selectSingleNode(::SysAllocString(selnodecstr), &spTheNode);
if (spTheNode!=NULL)//节点未找到
{
spTheNode->put_text(::SysAllocString(val));
spXmldoc->save(varXmlFile); //保存xml。
result=0;
}
else
{
spXmldoc->createElement(::SysAllocString(key),&spTheElem);
spTheElem->put_text(::SysAllocString(val)); spRoot->selectSingleNode(::SysAllocString(_T("/SaejongConfig/")+sec),&spTheNode);
spTheNode->appendChild(spTheElem,&spNewNode); spXmldoc->save(varXmlFile); //保存xml。
result=0;
} spRoot.Release();
bstrXml.Empty();
}
varXmlFile.ClearToZero();
}
spXmldoc.Release();
CoUninitialize(); return result;
}