MSXML各种纠结问题

用微软的解析,用的 30的document,修改节点和查询节点:

 

首先SUCCEEDED(pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30) 创建,加载文档

有了文档,就可以获取节点了。

用getElementsByTagName可以获取所有同名的标签节点,有点效率小问题,毕竟要查找节点才能找到名字,

一般就是一层层往下找。可以先获取  pDoc->get_documentElement(&pRoot); 根节点,然后从根节点出发查找指定的节点,并查找属性。

 

可以selectnodes获取同名的列表,获取长度之后,循环遍历。

每个节点会有子节点,GetfirstChild,每个子节点的兄弟节点GetnextSibling,节点名字和值之类的可以直接获取了,

节点属性值 pNameNMP = pNx->Getattributes();MSXML2::IXMLDOMNamedNodeMapPtr pNameNMP

要获得有名节点映射表,之后,可以用length来获取有几个属性值。Getitem可以遍历所有属性节点,这些节点的值可以获取了

,然后修改节点属性值l

MSXML2::IXMLDOMElementPtr( pNx )->setAttribute(_bstr_t(_T("connectionString")),varT)

把之前获得到的节点拿出来(就是属性节点的上一层或者父节点)就可以设置属性值了。

 

现在来说一下问题。

1:主要是设置属性一直没正确,调试了N次后发现就结的catch块…………出错了,就没保存修改。

2:一个算是小BUG的玩意吧,VARIANT变量的纠结命名啊,在vt_Bstr 在 <tag   attr = value> </tag>这个模式下可以设置值,但是在

  <tag attr = value />在这个模式下就是悲剧,不能赋值。一直是空,后来用_bstr_t重新命名变量,这个类是从 VARIANT继承来的玩意,

(用的wlt),重新命名后再调用setAttribute后就没这些问题了。建议变量以后按照函数的定义形式来,强制装换有时候也会有出问题的的时候。

3.结束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章