2015-03-15 6 views
0

Мне нужно заменить все узлы другими узлами.Builder C++: XMLDocument Заменить узел

Мой текущий узел:

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

ответ

0

Во-первых, этот код полон утечек памяти и неправильного доступа к памяти. IXMLNode является ссылочным подсчитанным интерфейсом, но вы неправильно управляете счетчиками ссылок. Вы должны заменить IXMLNode* на _di_IXMLNode и позволить ему управлять подсчетами ссылок для вас.

Во-вторых, чтобы заменить весь узел новым узлом, вы можете использовать метод родительского узла ChildNodes->ReplaceNode(). Вы можете использовать метод владельца CreateNode() для создания нового узла.