IXMLDOMElement* pElement;已经正确得到pElement指针
IXMLDOMNode* rootnode;
pElement->QueryInterface(IID_IXMLDOMNode,(void**)&rootnode);已经包含了msxml.h msxml2.lib #import <msxml3.dll>
IXMLDOMNode* rootnode;
pElement->QueryInterface(IID_IXMLDOMNode,(void**)&rootnode);已经包含了msxml.h msxml2.lib #import <msxml3.dll>
get_childNodesget_length
ASSERT(pXMLDoc!=NULL);
if (pos>0) {
try{
IXMLDOMElementPtr pXMLRootNode;
pXMLRootNode = IXMLDOMElementPtr(pXMLDoc->selectSingleNode("root"));
if(pXMLRootNode!=NULL){
IXMLDOMNamedNodeMapPtr pAttrs = NULL;
IXMLDOMNodePtr pAttrItem = NULL;
IXMLDOMNodeListPtr nodeList = pXMLRootNode->GetchildNodes();
IXMLDOMNodePtr childNodePtr = NULL;
DOMNodeType nodeType;
long nCount = nodeList->length;
if(nCount<=2){
return XMLFORMATERROR;
}
long nCount_ = 0;
CString strAttrName="";
CString strAttrValue="";
childNodePtr = nodeList->item[pos+1];
if(childNodePtr!=NULL){
childNodePtr->get_attributes(&pAttrs);
pAttrs->get_length(&nCount_);
nodeType = childNodePtr->nodeType;
if(nodeType == NODE_ELEMENT)
{
for(int j=0;j<nCount_;j++){
pAttrs->get_item(j,&pAttrItem);
strAttrName = (char*)(_bstr_t)pAttrItem->nodeName;
if(strAttrName.Compare("BufferLen")==0){
strAttrValue = (char*)(_bstr_t)pAttrItem->nodeTypedValue;
bufferLen = atoi(strAttrValue);
_variant_t vBuffer;
vBuffer = childNodePtr->nodeTypedValue;
for(long i=0;i<bufferLen;i++)
{
SafeArrayGetElement(vBuffer.parray,&i,pBuffer+i);
}
::VariantClear(&vBuffer);
break;
}
}
}
}
else{
return POSITIONNULL;
} if(pAttrs!=NULL){
pAttrs.Release();
pAttrs = NULL;
}
if(pAttrItem!=NULL){
pAttrItem.Release();
pAttrItem = NULL;
}
if(pAttrItem!=NULL){
nodeList.Release();
nodeList = NULL;
}
if(childNodePtr!=NULL){
childNodePtr.Release();
childNodePtr = NULL;
}
}
pXMLRootNode.Release();
pXMLRootNode = NULL;
}
catch (...) {
return XMLNODESELECTFAILURE;
}
return 1;
}
else
{
return POSITIONNULL;
}