Visual C++ .NET/XML/XPath
Read XPath
#include "stdafx.h"
using namespace System;
using namespace System::Xml;
using namespace System::Xml::XPath;
void Navigate(XPathNavigator ^nav, int depth)
{
Console::WriteLine(depth);
Console::WriteLine(nav->NodeType.ToString());
Console::WriteLine(nav->Name);
Console::WriteLine(nav->Value);
if (nav->HasAttributes)
{
nav->MoveToFirstAttribute();
do {
Console::WriteLine(nav->Name);
Console::WriteLine(nav->Value);
}
while(nav->MoveToNextAttribute());
nav->MoveToParent();
}
if (nav->MoveToFirstChild())
{
Navigate(nav, depth+1);
nav->MoveToParent();
}
if (nav->MoveToNext())
Navigate(nav, depth);
}
void main()
{
XmlDocument ^doc = gcnew XmlDocument();
try
{
doc->Load("..\\Monsters.xml");
XPathNavigator ^nav = doc->CreateNavigator();
nav->MoveToRoot();
Navigate(nav, 0);
}
catch (Exception ^e)
{
Console::WriteLine("Error Occurred: {0}", e->Message);
}
}
XPath Demo
#include "stdafx.h"
using namespace System;
using namespace System::Xml;
using namespace System::Xml::XPath;
using namespace System::Collections;
void GetM(XPathNavigator ^nav)
{
XPathNodeIterator ^list = nav->Select("/M/M/N");
while (list->MoveNext())
{
XPathNavigator ^n = list->Current;
Console::WriteLine(n->Value);
}
}
void main()
{
XmlDocument ^doc = gcnew XmlDocument();
try
{
doc->Load("a.xml");
XPathNavigator ^nav = doc->CreateNavigator();
nav->MoveToRoot();
GetM(nav);
}
catch (Exception ^e)
{
Console::WriteLine("Error Occurred: {0}", e->Message );
}
}