Xml(基于.COM)
组件化解决的问题是拿来就用,不需要太多的额外编译,就能够进行适配
仅仅引用头文件,加上一个可运行的程序,就可以到处使用,随时引用
甚至不要头文件,直接拿来用
COM里面有接口规范,可以通过接口查询方法
本地COM服务,COM控件需要先注册后使用(dll库、ocx库)。这是微服务器,当创建对象时,它帮你创建,COM控件需要通过它来管理
MSXML对应的头文件是<msxml2.h>
IXMLDOMNODE
IXMLDOMNode是文档对象模型(DOM)中的基本的对象,元素,属性,注释,过程指令和其他的文档组件都可以认为是IXMLDOMNode。该对象有以下几个功能:
get_nodeName
get_nodeValue
put_nodeValue
get_nodeType
get_parentNode
get_childNodes
get_firstNodes
get_lastChild
get_attributes
get_previousSibling 拿到前一个兄弟节点
get_nextSibling 拿到下一个兄弟节点
removeChild
appendChild
replaceChild
hasChildNodes
cloneNode
get_ownerDocument
get_text
put_text
get_dataType
put_dataType
transformNode
SelectNodes
get_parsed 获取解析状态
IXMLDOMNodeList
IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来。集合有以下几个功能
get_item
get_length
nextNode
reset
get__newEnum
IXMLDOMDocument2
全局统筹管理,相当于一个环境。 在创建xml时,必须指定一个Document
get_namespaces
get_schemas
setProperty
getProperty
Loadxml
interface接口
MsXml2.h里有#include ”rpc.h“,这是远程调用文件,因为是基于.COM
里有interface接口,因为是基于.COM的
封装代码
#pragma once
告诉编译器只编译一次,头文件里,不能定义全局变量(除非加extern)和实现静态成员变量
#import ”msxml3.dll“ //导入库,COM专用
#if defined(UNICODE) || defined(_UNICODE0)
#else
#endif
用上面这种方式来编译不同的版本。
class CXmlNodeList ; //因为Node里需要用到NodeList,但是NodeList还没定义好,所以需要预
//定义一下
class CXmlNode{};
class CXmlNodeList{};
格式说明
<faceconfig>
</faceconfig>
这样表示一个节点
使用示例
void xmlTest()
{
CoInitialize(NULL); //COM 初始化
CXmlDocument doc;
Bool ret = doc.Load(_T("FaceConfig.xml"));
ret = doc.SelectSingleNode(_T("/faceconfig"), root);
ret = root.GetFirstChildNode(_T("face"), face);
while(ret)
{
......
ret = face.GetNextSiblingNode(face);
}
face.Release();
root.Release();
doc.Release();
CoUninitialize();
}
SelectSingleNode()
/表示从根节点去查找
//表示当前节点下的任意节点
. 表示当前节点
.. 表示父节点