因为是做毕业论文,而且vc和xml都是第一次接触,有没有大侠救助下啊如何用MFC来做XML 的读写和保存~
如能提供例子,本人万分感激!THX
如能提供例子,本人万分感激!THX
解决方案 »
- 高分求助怎么在对话框的按钮上单击后弹出SDI的文档试图
- 哪位仁兄用过visual c++ 数字图像牧师识别技术及工程实践中的细化算法,懂这方面的进!!
- 进来拿分,新手读程序,这句看不太懂
- 哪里有比较漂亮的界面可以参考啊?
- 请教一个网络地址和端口转换的问题,小弟没分了,但很急,请个为大侠帮帮忙!!!
- 请问各位:改变窗口大小的资源是哪些?谢了!
- 这个tree该如何serialize???????????????
- MFC生成执行文件后的移植问题??
- 如何获取usb设备插入的usb hub对应的编号
- ie的插件怎么做
- 一个关于继续控件的问题!要求如下:-----------提供思路和资料也可!up的下次吧(:
- InstallShield高手请进来解决关于建立文件关联的问题
我也在做这方面的东西,有空交流一下吧。
/*author :xujin
date :2004/04/22
function:create xml
*/
void CXMLDlg::OnCreateXml()
{
// TODO: Add your control notification handler code here
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr xmlRoot;
//创建DOMDOCUMENT对象
HRESULT hr=pDoc.CreateInstance(_uuidof(MSXML2::DOMDocument40));
if(!SUCCEEDED(hr))
{
MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
return ;
}
pDoc->raw_createElement((_bstr_t)(char*)"china", &xmlRoot);
pDoc->raw_appendChild(xmlRoot, NULL);
MSXML2::IXMLDOMElementPtr childNode ;
pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);
childNode->Puttext("WuHan");//节点值
childNode->setAttribute("population","8,000,000");//属性名,属性值
childNode->setAttribute("area","10000");
xmlRoot->appendChild(childNode);
pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);
childNode->Puttext("ShangHai");
childNode->setAttribute("population","12,000,000");
childNode->setAttribute("area","12000");
xmlRoot->appendChild(childNode);
pDoc->save("e:\\he.xml");
}
/*author:xujin
date:2004/04/22
modifydate:2004/04/22
function:Pharse xml
*/void CXMLDlg::OnPharseXml()
{
// TODO: Add your control notification handler code here
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if(!SUCCEEDED(hr))
{
MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
return ;
}
//加载文件
pDoc->load("e:\\he.xml");
MSXML2::IXMLDOMElementPtr childNode ;
childNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode("//City"));
//得到节点类型
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->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;
}
}
另外,写xml文件使用dom的方式,而如果你读取xml文件,尽量使用sax方式,这是我的经验,后者占用内存很少,执行效率高。
我问个很“农民”的问题~
你那段代码是加在MFC AppWizard的source files的哪个文件里?
还有,要不要在stdafx.h中加#import"msxml4.dll"?
8要比4我啊,刚接触这些,还跟小学生一样~:-)
IXMLDOMDocumentPtr pXMLDoc; //配置文件
MSXML2::IMXWriterPtr pWr;void CIMClientDlg::CreateXMLdoc(CFile *pfile)
{
HRESULT hr;
hr = CoInitialize(NULL);
USES_CONVERSION;
//ISAXDTDHandlerPtr dtd=NULL;
hr = pWr.CreateInstance(__uuidof(MSXML2::MXXMLWriter));
//dtd = pWr;
pWr->indent = VARIANT_TRUE;
pWr->omitXMLDeclaration =VARIANT_TRUE;
ISAXContentHandlerPtr spContentHandler=NULL;
spContentHandler = pWr;
hr = spContentHandler->startDocument ();
char szPI[]= "version='1.0' encoding='gb2312' standalone='no'";//iso-8859-1 encoding = 'utf-16'
//Step 1: Create the XML declaration.
hr = spContentHandler->processingInstruction(L"xml", 3, A2W(szPI), strlen(szPI));//xml版本声明
IMXAttributesPtr pMXAttr = NULL;
ISAXAttributesPtr spAttributes = NULL;
hr = pMXAttr.CreateInstance(__uuidof(MSXML2::SAXAttributes));
hr = spContentHandler->startElement(L"", 0, L"userlist",8, L"userlist",8,spAttributes);
spContentHandler = pWr ;
int nIndex = 0;
int step =0;
hr = pMXAttr->clear();
//其他组
pMXAttr->addAttribute(L"",L"GroupName",L"GroupName","string","其他");
spAttributes = pMXAttr;
hr = spContentHandler->startElement(L"", 0, L"G",1, L"G",1,spAttributes);
hr = pMXAttr->clear();
hr = spContentHandler->endElement(L"",0,L"G",1, L"G",1);
hr = spContentHandler->endElement(L"",0,L"userlist",8, L"userlist",8);
hr = spContentHandler->endDocument();
VARIANT vtTemp = pWr->output;
CString str ="";
str= vtTemp.bstrVal;
LPTSTR st = str.LockBuffer();
int len = str.GetLength();
pfile->Write(st,len);
vtTemp.vt =VT_EMPTY;
pWr->output = vtTemp;
HTREEITEM hItem = tree_ctrl.AddGroup("其他");
if(hItem)
{
tree_ctrl.SetItemColor(hItem,RGB(19,55,144));
tree_ctrl.SetItemImage(hItem,0,0);
}
/* spContentHandler->Release ();
pMXAttr->Release ();
spAttributes->Release ();*/
}
www.vckbase.com里就有源码,你可以去找找,如果还有什么问题,可以联系