现在出现一个使用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();
       

    }

posted @ 2009-06-27 10:11  dzqabc  阅读(483)  评论(0编辑  收藏  举报