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()
方法创建新节点。
我需要用其他节点替换所有节点。
我当前节点:
<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()
方法创建新节点。