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);
}