Visual C++ .NET/XML/XPath
Read XPath
<source lang="csharp">
- 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); }
}
</source>
XPath Demo
<source lang="csharp">
- 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 ); }
}
</source>