现在出现一个使用msxml获取属性值的麻烦
- 问题内容: 现在出现一个使用msxml获取属性值的麻烦
- 原讨论链接: http://community.csdn.net/expert/topicview1.asp?id=4112296
- 所属论坛: HTML/XML 审核组: VC/MFC
- 提问者: jacksg 解决者: goodboyws
- 感谢: goodboyws、goodboyws、xxrl、goodboyws
- 关键字:
- 答案:
我现在有一个节点的属性值要获取,这个节点的属性名有98%左右都是相同的,但是有2%的不同,现在我要把这个节点的属性值全部取出来,但是使用 IXMLDOMElement的getAttribute老是出错,请教该怎么办?比如这个文件:
<?xml version="1.0" ?>
<Order>
<Account>9900234</Account>
<Item id="1">
<SKU>1234</SKU>
<PricePer>5.95</PricePer>
<Quantity>100</Quantity>
<Subtotal Name="total">595.00</Subtotal>
<Description>Super Widget Clamp</Description>
</Item>
<Item id="2">
<SKU>6234</SKU>
<PricePer>22.00</PricePer>
<Quantity>10</Quantity>
<Subtotal Name="total">220.00</Subtotal>
<Description>Mighty Foobar Flange</Description>
</Item>
<Item id="3">
<SKU>9982</SKU>
<PricePer>2.50</PricePer>
<Quantity>1000</Quantity>
<Subtotal Name="total">2500.00</Subtotal>
<Description>Deluxe Doohickie</Description>
</Item>
<Item id="4">
<SKU>3256</SKU>
<PricePer>389.00</PricePer>
<Quantity>1</Quantity>
<Subtotal NameC="total">389.00</Subtotal>
<Description>Muckalucket Bucket</Description>
</Item>
</Order>
就是要获取所有Name和NameC的值怎么做?
---------------------------------------------------------------
IXMLDOMNodePtr node; node=xml->selectSingleNode(_bstr_t("/Order/Item[1]"));
if (node==NULL)
return "";
IXMLDOMElementPtr element;
//CComQIPtr<IXMLDOMElement> element;
element=node;
VARIANT result;
result=element->getAttribute(bstr_t("SKU"));
---------------------------------------------------------------
上面的方法可以帮你处理重名节点
---------------------------------------------------------------
IXMLDOMNodePtr node;
IXMLDOMElementPtr element;
element=node;
// 楼上的做法正确 需要将node指针强制转换成element指针,这样我们就可以用element的获得属性方法
然后你再根据名称来取值
---------------------------------------------------------------
要想枚举所有的属性名称
IXMLDOMElementPtr element;
element=node;
IXMLDOMNamedNodeMap* pMap;
element->get_attributes(&pMap);
long len;
pMap->get_length(&len);
for (long i=0; i<len; i++)
{
IXMLDOMNode* pNode;
pMap->get_item(i, &pNode);
BSTR str;
pNode->get_nodeName(&str);
//这个就是属性名称
SysFreeString(str);
pNode->Release();
}
pMap->Release();
}