Вообще с XMLDocument можно как только не извращаться. Вот, например, вариант действия только через CreateNode и AppendChild:
X++:
TextBuffer txtBuffOut;
XMLDocument xmlDoc;
XMLElement documentNode, lineItemNode, elemNode, valueNode;
COM dom;
str resText;
;
dom = XMLDocument::XMLDOM();
xmlDoc = xmlNode::construct(dom);
documentNode = xmlDoc.createNode(XMLNodeType::ELEMENT, "Tag1", "");
while ( - )
where (-)
{
lineItemNode = xmlDoc.createNode(XMLNodeType::ELEMENT, "Tag2", "");
// Для каждого поля
elemNode = xmlDoc.createNode(XMLNodeType::ELEMENT, "Fileld1", "");
valueNode = xmlDoc.createNode(XMLNodeType::TEXT, "", "");
valueNode.nodeValue("Значение поля 1");
elemNode.appendChild(valueNode);
lineItemNode.appendChild(elemNode);
...
elemNode = xmlDoc.createNode(XMLNodeType::ELEMENT, "FileldN", "");
valueNode = xmlDoc.createNode(XMLNodeType::TEXT, "", "");
valueNode.nodeValue("Значение поля N");
elemNode.appendChild(valueNode);
lineItemNode.appendChild(elemNode);
documentNode.appendChild(lineItemNode);
}
}
xmlDoc.appendChild(documentNode);
resText = '<?xml version="1.0" encoding="Windows-1251" ?>' + "\n" + xmlDoc.xml();
txtBuffOut = new TextBuffer();
txtBuffOut.setText(resText);
txtBuffOut.toFile(FileName);