Visual C++ .NET/XML/XPath — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Версия 15:31, 26 мая 2010

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 );
    }
}