VC 6.0中读取XML文件
来源:互联网 发布:延时摄影后期软件 编辑:程序博客网 时间:2024/04/30 01:09
搞了一天 总算在VC 6.0中可以读取XML文件, 哎呀就是麻烦啊 我的天 搞了一整天头都大了
在百度上参考了 许多VC代码 但是不管我怎么调试都没成功 比如哦 http://hi.baidu.com/walfer/blog/item/0a548a44a113e24c500ffe37.html 就是编译不过去(自己做了修改,因为自己机子上没有atlstr.h头文件,而且也不想在此控制台程序中使用MFC) 提示什么7788的错误(fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786) 但百度再找一番此错误 说VC 6.0编译器的BUG, 不管了 后面又在百度上找其他的例子 http://blog.csdn.net/liuxiaoyi666/archive/2007/04/02/1549720.aspx 这回这个例子改改总算可以写XML文件了 但是读取呢? 哦,参考现在这个csdn上可行代码, 改改最先的那个baidu上的代码:
- //readxml.cpp
- #include <windows.h>
- #include <msxml.h>
- #include <iostream>
- #import "msxml.dll" rename_namespace("xml")
- using namespace std ;
- int main()
- {
- CoInitialize(NULL) ;
- xml::IXMLDOMDocumentPtr pDoc ;
- xml::IXMLDOMElementPtr pElem ;
- xml::IXMLDOMNodePtr pNode ;
- xml::IXMLDOMNodeListPtr pNodeList ;
- HRESULT hr = pDoc.CreateInstance(__uuidof(xml::DOMDocument)) ; //创建文档对象
- if(!SUCCEEDED(hr))
- {
- cout<<"无法创建DM对象!"<<endl ;
- return 0 ;
- }
- VARIANT_BOOL bFlag;
- bFlag = pDoc->load(L"BitComet.xml") ; //load xml文件
- if(bFlag == S_FALSE)
- {
- cout<<"打开BitComet.xml出错!"<<endl ;
- return 0 ;
- }
- hr = pDoc->get_documentElement(&pElem) ; //获取根结点
- if(pElem == NULL)
- {
- cout<<"获取根结点失败!"<<endl ;
- return 0 ;
- }
- BSTR strTagName = NULL;
- hr = pElem->get_tagName(&strTagName) ;
- cout<<"------TagName------"<<endl ;
- wcout <<strTagName<<endl ;
- SysFreeString(strTagName) ;
- hr = pElem->get_childNodes(&pNodeList) ; //获取子结点列表
- long lCount;
- hr = pNodeList->get_length(&lCount) ;
- for(long i=0; i<lCount; ++i)
- {
- xml::DOMNodeType NodeType ;
- xml::IXMLDOMNodeListPtr pChildNodeList ;
- hr = pNodeList->get_item(i, &pNode) ; //获取结点
- hr = pNode->get_nodeType(&NodeType) ; //获取结点信息的类型
- if(xml::NODE_ELEMENT == NodeType)
- {
- hr = pNode->get_childNodes(&pChildNodeList) ;
- long childLen ;
- pChildNodeList->get_length(&childLen) ;
- //设置宽字符区域(类似于国域)chs代表简体中文..可以在msdn上查询
- wcout.imbue(locale("chs")) ;
- cout << "------NodeList------" << endl ;
- for (int j=0; j<childLen; ++j)
- {
- xml::IXMLDOMNodePtr pChildNode ;
- BSTR strValue ;
- hr = pChildNodeList->get_item(j, &pChildNode) ;
- hr = pChildNode->get_nodeName(&strValue) ; //获取结点名字
- wcout<<strValue<<endl ;
- SysFreeString(strValue) ;
- hr = pChildNode->get_text(&strValue) ; //获取结点的值
- wcout <<strValue<<endl<<endl ;
- SysFreeString(strValue) ;
- pChildNode.Release() ;
- }
- }
- pNode.Release() ;
- pChildNodeList.Release() ;
- }
- pNodeList.Release() ;
- pElem.Release() ;
- pDoc.Release() ;
- CoUninitialize() ;
- return 0 ;
- }
if(pElem == NULL)
{
cout<<"获取根结点失败!"<<endl ;
return 0 ;
}
刚开始没加上这个if语句的时候 老出错 以为是pElem->get_tagName(&strTagName) ; 参数strTagName
因为刚开始不知道 存储空间由系统分配 以为对strTagName写操作导致崩溃 后面又到MSDN查了查 不是这个问题
然后就加上了这个if语句。 运行程序 提示:获取根结点失败! 为什么会失败?怪事?XML文档的问题?
再看了看那个http://hi.baidu.com/walfer/blog/item/0a548a44a113e24c500ffe37.html提供的XML文档 发现“序元码”<?xml version="1.0"?> 的问题 改成<?xml version="1.0" encoding="GB2312" ?> 获取根节点成功了
但是输出又出问题了(在没加wcout.imbue(locale("chs")) ; 之前) 怎么会输出不完全?输出“E:/” 就结束了 “电子书”死活显示不出来 看来用wcout汉字不能显示 又到百度找了找 加上了wcout.imbue(locale("chs")) ; 这回总算能完整的显示了:
------TagName------
BitComet
------NodeList------
LastSaveLocation
E:/电子书
ListenPort
8497
GlobalMaxUploadRate
3072
LastAdCacheClearDate
13104
LastTrackerKey
16547
TotalUpload
303008
TotalDownload
1180107
LastExitTime
1132203124
- VC 6.0中读取XML文件
- VC 读取XML文件
- vc++中读取xml
- VC++中XML文件的解析读取写入
- VC中读取MAT文件
- VC中怎么读取文件
- VC中怎么读取文件
- vc中的xml文件读取操作
- VC++读取XML文件生成树
- VC++读取XML文件生成树
- VC++读取XML文件生成树
- vc++读取xml文件中的属性值
- VC++读取XML文件生成树
- VC创建与读取XML文件
- vc++中读取xml——tinyxml
- C#中XML文件读取
- FLEX中读取XML文件
- unity中读取xml文件
- VC++ 6.0 嵌入与调用汇编程式
- 动态调用一个未知的服务
- struts2标签详解(转)
- 我并非事事都不如意------最新游戏大作9月16日上市
- QT4.3.3+VC6.0安装编译教程
- VC 6.0中读取XML文件
- 首席安全官别就是一只纸老虎
- Flex 程序性能测试
- 皮克斯工作室
- 1111111111111111111111111111111111111111111111
- 在C#中用户控件与窗体间的消息传递
- ASP.NET下实现真正的模态窗口
- find 命令清除系统垃圾
- Google AdSense申请完全手册