3

appendChildを実行した後、次のノードを読み取れないのはなぜですか?

(newChildList->get_item(count,&pNewChild))

API が正常appendChild に機能していません。この行を入れた後get_item()、ループで次の行を取得できません。pNewChildどちらが であるかを返しますNULL。なぜこれが起こるのですか?

IXMLDOMNode *pNewChild=NULL,*outNewChild;
IXMLDOMNodeList *newChildList=NULL;
BSTR newName;
long len=0;
HRESULT hr=S_OK;

//aggregate attribute
//CHK_HR(aggregateAttribute(pNodeNew,pXMLDomSrc,pXMLDomNew));

//read the list of child
CHK_HR(pNodeNew->get_childNodes(&newChildList));
CHK_HR(newChildList->get_length(&len));
//go over all the children
for(long count=0;count<len;count++)
{       
    hr =newChildList->get_item(count,&pNewChild);
    CHK_HR(pNewChild->get_nodeName(&newName));

    USES_CONVERSION;
    string temp= W2T(newName);
    temp = temp.substr(temp.find_first_of("/:")+1);
    if (!temp.compare("tuple")) 
    {       
        //CHK_HR(aggregateTuple(pXMLDomSrc,pNewChild));
    }       
    else 
    {       
        CHK_HR(pXMLElement->appendChild(pNewChild,&outNewChild));
    }
    SAFE_RELEASE(pNewChild);
    //SysFreeString(newName);
}

CleanUp:
//SAFE_RELEASE(newChildList);
SAFE_RELEASE(pNewChild);
return hr;
4

1 に答える 1

2

appendChild はノードを別の場所に移動し、毎回子リストを 1 つ減らします。

これを試して :

// reverse loop from index base 0 "len-1" to 0
for(long count=len-1;count>=0;--count)

余談ですが、大量のメモリ リークが発生します (outNewChildおよびnewName) 。

于 2014-02-10T17:58:23.090 に答える