Visual C++ .NET/XML/DOM
#include "stdafx.h"
using namespace System;
using namespace System::Xml;
void Navigate(XmlNode ^node, int depth)
{
if (node == nullptr)
return;
Console::WriteLine(depth);
Console::WriteLine(node->NodeType.ToString());
Console::WriteLine(node->Name);
Console::WriteLine(node->Value);
if (node->Attributes != nullptr)
{
for (int i = 0; i < node->Attributes->Count; i++)
{
Console::WriteLine(depth+1);
Console::WriteLine(node->Attributes[i]->Name);
Console::WriteLine(node->Attributes[i]->Value);
}
}
Navigate(node->FirstChild, depth+1);
Navigate(node->NextSibling, depth);
}
void main()
{
XmlDocument ^doc = gcnew XmlDocument();
try
{
XmlReader ^reader = XmlReader::Create("..\\Monsters.xml");
doc->Load(reader);
reader->Close();
XmlNode ^node = doc->FirstChild;
Navigate(node, 0);
}
catch (Exception ^e)
{
Console::WriteLine("Error Occurred: {0}", e->Message);
}
}
Update XML DOM
#include "stdafx.h"
using namespace System;
using namespace System::Xml;
void Navigate(XmlNode ^node)
{
if (node == nullptr)
return;
if (node->Value != nullptr && node->Value->Equals("D"))
{
if (node->ParentNode->ParentNode["Name"]->FirstChild->Value->Equals("G"))
{
node->Value = "S";
node->ParentNode->Attributes["Damage"]->Value = "1d8";
}
}
Navigate(node->FirstChild);
Navigate(node->NextSibling);
}
void main()
{
XmlDocument ^doc = gcnew XmlDocument();
try{
doc->Load("a.xml");
XmlNode ^root = doc->DocumentElement;
Navigate(root);
doc->Save("New.xml");
}catch (Exception ^e){
Console::WriteLine("Error Occurred: {0}", e->Message );
}
}
Write XML DOM
#include "stdafx.h"
using namespace System;
using namespace System::Xml;
XmlElement ^CreateMonster(XmlDocument ^doc){
XmlElement ^skeleton = doc->CreateElement("M");
XmlElement ^name = doc->CreateElement("N");
name->AppendChild(doc->CreateTextNode("S"));
skeleton->AppendChild(name);
XmlElement ^hitdice = doc->CreateElement("H");
XmlAttribute ^att = doc->CreateAttribute("D");
att->Value = "1";
hitdice->Attributes->Append(att);
att = doc->CreateAttribute("Default");
att->Value = "3";
hitdice->Attributes->Append(att);
skeleton->AppendChild(hitdice);
XmlElement ^weapon = doc->CreateElement("W");
att = doc->CreateAttribute("N");
att->Value = "2";
weapon->Attributes->Append(att);
att = doc->CreateAttribute("D");
att->Value = "1";
weapon->Attributes->Append(att);
weapon->AppendChild(doc->CreateTextNode("C"));
skeleton->AppendChild(weapon);
return skeleton;
}
void main()
{
XmlDocument ^doc = gcnew XmlDocument();
try
{
doc->Load("a.xml");
XmlNode ^root = doc->DocumentElement;
XmlNode ^child = root->FirstChild->NextSibling;
root->InsertAfter(CreateMonster(doc), child);
doc->Save("New.xml");
}
catch (Exception ^e)
{
Console::WriteLine("Error Occurred: {0}", e->Message );
}
}