今天程序中有处理xml的相关操作,使用的是Micsoft的MSXML,记录下一些基本操作:
头文件:
#import "msxml3.dll"
using namespace MSXML2;
inline void TESTHR(HRESULT _hr) { if FAILED(_hr) throw(_hr); }
实现文件:
TESTHR(CoInitialize(NULL)); // 初始化 COM 环境
IXMLDOMNodePtr CClient::ReadXMLFile(const char *name)
{
// 我们首先应该先创建一个 Document 对象 如果创建成功,那么我们就会得到一个 XMLDOMDocument 对象实例。
MSXML::IXMLDOMDocumentPtr docPtr = NULL;
try
{
//init
docPtr.CreateInstance("msxml2.domdocument");
// load a document
_variant_t varXml(name);
_variant_t varOut((bool)TRUE);
varOut = docPtr->load(varXml);
if ((bool)varOut == FALSE)
throw(0);
return docPtr;
}
catch(...)
{
IXMLDOMParseError *pIParseError = NULL;
docPtr->get_parseError(&pIParseError);
m_strError = (char *)pIParseError->srcText;
}
return NULL;
}
......
IXMLDOMNodePtr attr; // 创建 Element 对象
if ( ptr->nodeType == NODE_ELEMENT ) // 节点类型
{
ptr->nodeName; // 节点名
ptr->childNodes->length; // 子节点个数
ptr->childNodes->item[i]->attributes->length; // 子节点第i项有几项属性
ptr->childNodes->item[i]->attributes->get_item(j, &attr); // 子节点第i项的第j个属性
attr->nodeName; // 上面属性的属性名称
attr->text; // 上面属性的属性值
......
}
......
IXMLDOMNodePtr ptr;
ptr = ptr->parentNode->selectSingleNode("template[@lead_pri_form='AUTO_3X4']"); // 定位节点
......
头文件:
#import "msxml3.dll"
using namespace MSXML2;
inline void TESTHR(HRESULT _hr) { if FAILED(_hr) throw(_hr); }
实现文件:
TESTHR(CoInitialize(NULL)); // 初始化 COM 环境
IXMLDOMNodePtr CClient::ReadXMLFile(const char *name)
{
// 我们首先应该先创建一个 Document 对象 如果创建成功,那么我们就会得到一个 XMLDOMDocument 对象实例。
MSXML::IXMLDOMDocumentPtr docPtr = NULL;
try
{
//init
docPtr.CreateInstance("msxml2.domdocument");
// load a document
_variant_t varXml(name);
_variant_t varOut((bool)TRUE);
varOut = docPtr->load(varXml);
if ((bool)varOut == FALSE)
throw(0);
return docPtr;
}
catch(...)
{
IXMLDOMParseError *pIParseError = NULL;
docPtr->get_parseError(&pIParseError);
m_strError = (char *)pIParseError->srcText;
}
return NULL;
}
......
IXMLDOMNodePtr attr; // 创建 Element 对象
if ( ptr->nodeType == NODE_ELEMENT ) // 节点类型
{
ptr->nodeName; // 节点名
ptr->childNodes->length; // 子节点个数
ptr->childNodes->item[i]->attributes->length; // 子节点第i项有几项属性
ptr->childNodes->item[i]->attributes->get_item(j, &attr); // 子节点第i项的第j个属性
attr->nodeName; // 上面属性的属性名称
attr->text; // 上面属性的属性值
......
}
......
IXMLDOMNodePtr ptr;
ptr = ptr->parentNode->selectSingleNode("template[@lead_pri_form='AUTO_3X4']"); // 定位节点
......