Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > XML?


Автор: unkis 10.9.2005, 21:55
Ребята есть такой вот XML файл:

Код

<Kino>
    <Film id ="1" name = "com">
        <dlina>2</dlinal>
        <razmer>3</razmer>
        <ru_en>ru</ru_en>
    </Film>
        <Film id ="2" name = "kl">
        <dlina>8</dlinal>
        <razmer>9</razmer>
        <ru_en>ru</ru_en>
    </Film>
        <Film id ="3" name = "jk">
        <dlina>6</dlinal>
        <razmer>7</razmer>
        <ru_en>ru</ru_en>
    </Film>
        
</Kino>
 


Надо както добнаться до тега <dlina>2</dlinal>, <razmer>3</razmer>, <ru_en>ru</ru_en> и прочитать их содержания и так для каждого фильма.

Как добраться до этих тегов?


Зарания благодаре.

Автор: Дрон 10.9.2005, 22:27
unkis
Цитата(unkis @ 10.9.2005, 22:55)
Как добраться до этих тегов?

Да всяких разных вариантов навалом smile

Вот два примера. Какой из них лучше зависит от ситуации.
В обоих есть минусы и плюсы, но обоими можно достичь абсолютно одинаковых результатов smile
Код

using System;
using System.Xml; // для первого метода
using System.Data; // для второго метода

namespace ConsoleApplication1
{
    class Class1
    {

        static void Main(string[] args)
        {
            Console.WriteLine("\n\t\t-- Method1 --\n");
            Method1();
            Console.WriteLine("\n\t\t-- Method2 --\n");
            Method2();
            Console.ReadLine();
        }

        static void Method1()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("C:\\test.xml");
            XmlNodeList films = doc.GetElementsByTagName("Film");
            foreach(XmlElement film in films)
            {
                Console.WriteLine("Film #{0} - {1}",
                    film.Attributes["id"].Value,film.Attributes["name"].Value);
                foreach(XmlElement info in film.ChildNodes)
                {
                    Console.WriteLine("\t{0}: {1}",info.Name, info.InnerText);
                }
            }
        }

        static void Method2()
        {
            DataSet ds = new DataSet();
            ds.ReadXml("C:\\test.xml");
            DataTable films = ds.Tables["Film"];
            foreach(DataRow row in films.Rows)
            {
                Console.WriteLine("Film #{0} - {1}", row["id"],row["name"]);
                foreach(DataColumn col in films.Columns)
                {
                    if(col.Caption!="id" && col.Caption!="name")
                        Console.WriteLine("\t{0}: {1}",col.Caption, row[col]);
                }
            }
        }
    }
}

Мне, например, в данном случае больше нравится второй подход. Ибо случай простой smile
Если есть вопросы -- спрашивай, объясню подробней.

ЗЫ: Кстати, у тебя в XML ошибка: вместо закрывающий тэга </dlinal> должен быть </dlina> smile

Автор: unkis 11.9.2005, 10:44
спасибо.

А если у меня к примеру есть три переменных

Код

double dlina;
double razmer;
string ru_en;


так вот как мне этим переменным присвоить своё значения сначала для филма 1 потом для фильма 2 и так далее.\


Зарания благодарен.

Автор: Дрон 11.9.2005, 11:15
Так каким способом пользуемся-то?

Для второго замени первый цикл foreach на вот это:
Код

            foreach(DataRow row in films.Rows) // цикл по всем фильмам -- каждая строка таблицы - один фильм
            {
                    double dlina = double.Parse((row["dlina"].ToString());
                    double razmer  = double.Parse((row["razmer".ToString());
                    string ru_en = row["ru_en"].ToString();
                   // ну а дальше делай с ними что хочешь
            }


Только к чему этот вопрос, мне-то казалось, что я вполне очевидные примеры привёл smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)