在 Windows Mobile 下使用MSXML
来源:互联网 发布:linux svn上传新项目 编辑:程序博客网 时间:2024/05/01 05:04
最后一次用msxml是在2001年,这么多年都快忘光了。只能一边翻 MSDN 一边写测试代码,同时还要感叹着这几年荒废的东西到底有多少。记下来 DOM 的用法,免得以后再忘:)
首先是头文件:
#include <msxml.h>
初始化 COM 环境:
hr = CoInitializeEx(NULL, 0);
创建一个 XML DOM 对象:
IXMLDOMDocument *pDOM = NULL;
hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
IID_IXMLDOMDocument, (LPVOID*)&pDOM);
然后就是加载XML的内容,加载有两种方式,从文件加载和从字符串加载:
// 从文件加载
VARIANT vt;
VARIANT_BOOL fSuccess;
vt.vt = VT_BSTR;
vt.bstrVal = SysAllocString(szPath);
hr = pDOM->load(vt, &fSuccess);
// 从字符串加载,第一个参数的类型是 BSTR,不过 LPWSTR 也没关系
// 如果项目的预处理器没有设置 UNICODE 之类的东西,就用 char* 吧
LPWSTR xmlSource = TEXT(“<Root/>”)
hr = pDOM->loadXML(xmlSource, &fSuccess);
得到 DOM 对象后,可以直接创建新的元素、节点;也可以从根节点开始遍历;也可以选择自己想要的节点直接进行处理。
选择根节点:
IXMLDOMElement* pRoot = NULL;
hr = pDom->get_documentElement(&pRoot);
从根节点开始遍历需要用到 IXMLDOMNodeList 接口:
IXMLDOMNodeList* pNodeList = NULL;
hr = pRoot->get_childNodes(&pNodeList);
IXMLDOMNode* pNode = NULL;
hr = pNodeList->nextNode(&pNode); // 注意这个返回值,你可以不管它,但不要用 hr != S_OK 判断
while( pNode != NULL )
{
// 干你想干的任何事,然后得到下一个节点
hr = pNodeList->nextNode(&pNode); /
}
从 IXMLDOMNodeList 中只能得到 IXMLDOMNode 接口,如果需要其它接口的操作,需要作点手脚。
1.接口查询,在你你确切知道这个节点的类型的时候比较有用
IXMLDOMElement* pElement = NULL;
hr = pNode->QueryInterface(IID_IXMLDOMElement, (void **)&pElement);
2.获得接口的真实类型,当你需要根据节点类型作不同处理的时候有用
DOMNodeType type;
Hr = pNode->get_nodeType(&type);
需要选择部分节点进行访问有两种方法:
HRESULT selectSingleNodes(BSTR queryString, IXMLDOMNode** resultNode);
HRESULT selectNodes(BSTR queryString, IXMLDOMNode** resultNode);
第一个用来选在单一节点,第二个用来选择多个节点。查询的语法在 XPath 中有详细介绍。这两个方法对于 IXMLDOMDocument, IXMLDOMNode, IXMLDOMElement 都适用。其实只要知道 IXMLDOMNode 支持就可以了,其他两个接口都是它的派生接口。
比如要选择根节点下的所有 Contact 节点:
hr = pRoot->selectNodes(TEXT("./Contact"), &pNodeList);
其它常用的操作是删除元素、添加元素、设置和访问属性值:
删除元素可以使用:IXMLDOMNode::removeChild;
添加元素可以使用:IXMLDOMNode::appendChild;
设置属性可以使用:IXMLDOMElement::setAttribute;
访问属性可以使用:IXMLDOMElement::getAttribute;
创建元素、属性等可以使用 IXMLDOMDocument 的一系列 create 方法,比如创建元素的 createElement 等。这次最经常用到的两个是 createElement 和 createProcessingInstruction:
IXMLDOMProcessingInstruction* pInstruction = NULL;
IXMLDOMNode* pNewNode = NULL;
hr = pDOM->createProcessingInstruction( TEXT("xml"),
TEXT("version='1.0' encoding='UTF-8'"), &pInstruction);
_variant_t vt = pRoot; // 插到根节点的前面
pDom->insertBefore(pInstruction, vt, &pNewNode);
pInstruction->Release();
pNewNode->Release();
IXMLDOMElement* pElement = NULL;
hr = pDOM->createElement(TEXT(“ElementName”), &pElement);
可以给 pElement 添加子节点,设置属性,然后添加
hr = pRoot->appendChild(pElement, &pNewNode);
pElement->Release();
pNewNode->Release();
最后是 xml 文档的保存
_variant_t varString = TEXT("//saved.xml");
hr = pDOM->save(varString);
别忘了释放资源:
pNodeList->Release();
pRoot->Release();
pDOM->Release();
- 在 Windows Mobile 下使用MSXML
- Windows Mobile下使用HTML控件 Mobile
- WINDOWS CE 下使用MSXML中的初始化问题
- 在vc下使用msxml的时候遇到_CrtIsValidHeapPointer(pUserData)
- 在Windows Mobile 5.0下播放MP3
- tinyxml在Windows Mobile/windows ce 5.0项目下使用的问题
- Windows Mobile下使用HTML控件
- Windows Mobile 环境下证书功能使用
- Windows Mobile下使用HTML控件
- Windows Mobile下使用HTML控件
- Windows Mobile 下使用DirectShow播放视频文件
- Windows Mobile下使用ZLIB压缩
- 在 Windows Mobile 上使用 GDI+
- 在Windows Mobile上使用滚动条
- 在Windows Mobile模拟器上使用蓝牙
- 在Windows 7下使用Mobile 设备中心与A702连接
- windows mobile 模拟器上网配置(在windows xp下)
- 在Windows Mobile和Wince(Windows Embedded CE)下如何使用.NET Compact Framework开发进程管理程序
- 我的股票:2007/03/21
- C#中如何产生字母和数字的随机组合
- SQL2005比2000加了那些功能
- 在JBoss中配置DB2的数据源
- 去美国参加2007MVP全球峰会归来有感
- 在 Windows Mobile 下使用MSXML
- 清除系统垃圾文件的BAT脚本
- 很幽默的讲解六种Socket I/O模型
- Java SE 6中的JDBC 4.0增强
- 3.22晴 东京
- SQL取得当前日期及日期格式
- EVC4.0安装说明,开发ppc2003
- grep 学习笔记
- 最强的顺口溜!(强烈推荐,耐心读完!)