Visual C++ .NET/XML/DOM
<source lang="csharp">
- 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); }
}
</source>
Update XML DOM
<source lang="csharp">
- 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 ); }
}
</source>
Write XML DOM
<source lang="csharp">
- 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 ); }
}
</source>