T
Ich habe es nach längerem Probieren rausgefunden.
Hier durchlaufe ich noch eine Hashmap, aber vom Prinzip her funktioniert das so hier:
POSITION pos;
CPerson *m_Person;
CString pfad;
pfad = "test1.xml";
//Für die Erstellung der XML-Datei
IXMLDOMDocument2Ptr xmlDoc;
MSXML2::IXMLDOMElementPtr xmlDocRoot;
// Initialize COM
::CoInitialize(NULL);
HRESULT hr = xmlDoc.CreateInstance(MSXML2::CLSID_DOMDocument);
if (FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
}
xmlDoc->load((_variant_t)pfad);
xmlDoc->appendChild (xmlDoc->createProcessingInstruction("xml","version=\"1.0\" encoding=\"utf-8\""));
//Festlegen des Root-Tags
xmlDoc->documentElement =xmlDoc->createElement("root");
//xmlDoc->documentElement->appendChild(xmlDocRoot);
//Durchlaufen der Hashmap und bilden eines DOMDocuments
for( pos = map_Person.GetStartPosition(); pos != NULL; )
{
VARIANT vtTemp;
vtTemp.vt=VT_I2;
vtTemp.iVal = 1;
//
CString key;
map_Person.GetNextAssoc( pos, key, (CObject *&)m_Person );
//Anlegen der einzelnen DOM-Knoten
MSXML2::IXMLDOMNodePtr EtikettElement = xmlDoc->createNode(vtTemp, "Etikett","");
MSXML2::IXMLDOMNodePtr SnrElement = xmlDoc->createNode(vtTemp, "Seriennummer", "");
MSXML2::IXMLDOMTextPtr SnrTextElement = xmlDoc->createTextNode((_bstr_t)key);
MSXML2::IXMLDOMNodePtr NameElement = xmlDoc->createNode(vtTemp, "Name", "");
MSXML2::IXMLDOMTextPtr NameTextElement = xmlDoc->createTextNode((_bstr_t)m_Person->GetName());
MSXML2::IXMLDOMNodePtr wwwAdresseElement = xmlDoc->createNode(vtTemp, "wwwAdresse", "");
MSXML2::IXMLDOMTextPtr wwwAdresseTextElement = xmlDoc->createTextNode((_bstr_t)m_Person->GetwwwAdresse());
MSXML2::IXMLDOMNodePtr wwwTitelElement = xmlDoc->createNode(vtTemp, "wwwTitel", "");
MSXML2::IXMLDOMTextPtr wwwTitelTextElement = xmlDoc->createTextNode((_bstr_t)m_Person->GetTitle());
//Ineinanderschachteln der Knoten
wwwTitelElement->appendChild(wwwTitelTextElement);
wwwAdresseElement->appendChild(wwwAdresseTextElement);
NameElement->appendChild(NameTextElement);
SnrElement->appendChild(SnrTextElement);
EtikettElement->appendChild(SnrElement);
EtikettElement->appendChild(NameElement);
EtikettElement->appendChild(wwwAdresseElement);
EtikettElement->appendChild(wwwTitelElement);
xmlDoc->documentElement->appendChild(EtikettElement);
}
xmlDoc->save("Test1.xml");
}
Wollte zum besseren Verständnis auch noch den dazugehörigen XML-Baum angeben:
<root>
<Etikett>
<Seriennummer>0000000000F14FF2</Seriennummer>
<Name>Fritz</Name>
<wwwAdresse>http://www.fit.fraunhofer.de</wwwAdresse>
<wwwTitel>Fraunhofer FIT - Willkommen - Mozilla Firebird</wwwTitel>
</Etikett>
</root>