Builder C++:XMLDocument 替换节点

Builder C++: XMLDocument Replace Node

我需要用其他节点替换所有节点。

我当前节点:

<str name="author">Brad Mc</str>

我需要用这个节点替换它:

<author>Brad Mc<author>

我有这段代码可以用其他节点替换所有节点:

IXMLNode* xResultNode = XMLDocument1->DocumentElement->ChildNodes->FindNode("result");
IXMLNode* xDocNode;
IXMLNode* xFieldNode;
IXMLNode* xNewFieldNode;
// <result>
for (int i = 0; i < xResultNode->ChildNodes->Count - 1; i) {
    // <doc>
    xDocNode = xResultNode->ChildNodes->Get(i);
    int count = xDocNode->ChildNodes->Count;
    for (int j = 0; j < count - 1; j++) {
        // <field>
        xFieldNode = xDocNode->ChildNodes->Get(j);
        String FieldName = xFieldNode->Attributes["name"];
        String FieldText = xFieldNode->Text;
        // Create new Node / modify node
        xNewFieldNode = xDocNode->AddChild(FieldName);
        xNewFieldNode->SetText(FieldText);
        // I need to replace xFieldNode with xNewFieldNode
        // how to do that? 
    }
}
XMLDocument1->SaveToFile("./ResponseOutPut.xml");

首先,这段代码充满了内存泄漏和无效内存访问。 IXMLNode 是一个引用计数接口,但您没有正确管理引用计数。您需要将 IXMLNode* 替换为 _di_IXMLNode 并让它为您管理引用计数。

其次,要用新节点替换整个节点,可以使用父节点的ChildNodes->ReplaceNode() method. You can use the owning document's CreateNode()方法创建新节点。