现在xml文档应用的方面特别的多.
我把以前写过的一个例子帖出来,以备以后使用.
第一部分:dom解析:
概述:dom解析将会把一个完整的xml文档读进来,生成一个结构树。这样会要把xml文档全部都加载到内在中。所以解析起来的速度会要慢一些。
1、如何加载xml文件:
//创建dom,加载xml文档
msxml::ixmldomdocumentptr pcommanddoc;
pcommanddoc.createinstance(__uuidof(msxml::domdocument));
pcommanddoc->put_async(variant_false);
pcommanddoc->put_validateonparse(variant_false);
pcommanddoc->put_resolveexternals(variant_false);
pcommanddoc->put_preservewhitespace(variant_true);
pcommanddoc->load(file.getbuffer(0));
2、在xml文档中查找指定的结点:
//找到
msxml::ixmldomnodeptr prootnode=pcommanddoc->selectsinglenode("root/record");
if (prootnode==null)
{
return ;
}
3、得到xml文档中,结点的属性
cstring strtemp;
msxml::ixmldomnamednodemapptr pattrs = null;
prootnode->get_attributes(&pattrs);
if (pattrs==null)
{
return;
}
msxml::ixmldomnodeptr prequesttypeattr=pattrs->getqualifieditem("name","");
_bstr_t strrequesttype=prequesttypeattr->gettext();
strtemp=strrequesttype.operator char *();
4、得到结点的内容
_bstr_t strvisiport=pnode->gettext();
5、设置结点的内容
hresult hr=pnode->put_text(_bstr_t(m_strgatewaypassword));
6、设置一个属性内容
ixmldomattribute *pa=null;
bstr = sysallocstring(l"属性1");
pxmldom->createattribute(bstr,&pnode);
var = variantstring(l"strin");
pa->put_value(var);
proot->setattributenode(pa, &pa1);
第二部分、如何使用sax解析
概述:sax使用的是加载式的,将会把xml文档分断,加载到内存中。使用事件通知的方式,来表示找到结点。好像没有写文档的能力吧。它的速度要比dom快不少。
使用sax的时候,就需要重载msxml4.0中的一个接口isaxcontenthandler。
有几个函数重载了之后,当找到了结点之后,就会回调这一些函数。