现在的位置: 首页 > 综合 > 正文

Q:How to read attribute from a tag

2012年02月01日 ⁄ 综合 ⁄ 共 2167字 ⁄ 字号 评论关闭

Q:How to read attribute from a tag
--------------------------------------------------------------------------------

<?xml version="1.0"?>
<autos>
  <manufacturer name="Chevrolet">
    <make name="Corvette">
      <model>2000 Convertible</model>
      <price currency="usd">60,000</price>
      <horsePower>420</horsePower>
      <fuelCapacity units="gallons">18.5</fuelCapacity>
    </make>
  </manufacturer>
  <manufacturer name="Mazda">
    <make name="RX-7">
      <model>test model</model>
      <price currency="usd">30,000</price>
      <horsePower>350</horsePower>
      <fuelCapacity units="gallons">15.5</fuelCapacity>
    </make>
  </manufacturer>
</autos>
--------------------
A:
call this from an IXMLDOMElementPtr, should work

example:
IXMLDOMDocumentPtr xml_File;
IXMLDOMElementPtr xml_Root;
IXMLDOMElementPtr xml_Element;

xml_File->load("XMLDOMFromVC.xml");
xml_Root = xml_File->documentElement;

xml_Element = xml_Root->firstChild;
_bstr_t readed;
if(xml_Element->getAttributeNode("name")!=NULL)

    readed = xml_Element->getAttribute("name");
}

不是API 是COM接口 类似Ado访问数据库
例如
IXMLDOMDocumentPtr pXmlDoc;
 IXMLDOMNodePtr pXmlNode;
 IXMLDOMNodePtr pXmlChildNode;
 IXMLDOMNodeListPtr pXmlNodeList;
 IXMLDOMNamedNodeMapPtr  pXmlNodeMap;

 try
 { 
  hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
  if(FAILED(hr))
  {
   MessageBox(0,"error!",0,0);
  }
  else
  {
   pXmlDoc->load(_bstr_t(pszFilePath));
   pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Functions/function[@visit='" + strVisit + "']" ));
   pXmlNode = pXmlNodeList->nextNode();
   
   while(pXmlNode != NULL)
   {
    int nidx = listCtrl.GetItemCount();
    pXmlNodeMap = pXmlNode->Getattributes();
    pXmlChildNode = pXmlNodeMap->getNamedItem(_bstr_t("name"));
    listCtrl.InsertItem(nidx, W2A(pXmlChildNode->Gettext()));

    pXmlChildNode = pXmlNodeMap->getNamedItem(_bstr_t("visit"));
    listCtrl.SetItemText(nidx, 1, W2A(pXmlChildNode->Gettext()));
    
    pXmlChildNode = pXmlNodeMap->getNamedItem(_bstr_t("ID"));
    int ID = atoi (W2A(pXmlChildNode->Gettext()));
    listCtrl.SetItemData(nidx, ID);

    pXmlChildNode = pXmlNode->GetlastChild();
    listCtrl.SetItemText(nidx, 2, W2A(pXmlChildNode->Gettext()));
    pXmlNode = pXmlNodeList->nextNode();  
   }
  }
 }
 catch(_com_error& e)
 {
  MessageBox(0, W2A(e.Description()),0,0);
 }

 

抱歉!评论已关闭.