Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получение данных из xml 
:(
    Опции темы
_Dream
Дата 8.11.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



Привет. снова я  smile 
кусок xml'a 

<ItemGroup>
    <EmbeddedResource Include="Form1.resx">
      <SubType>Designer</SubType>
      <DependentUpon>Form1.cs</DependentUpon>
    </EmbeddedResource>
    <EmbeddedResource Include="Form1.ru.resx">
      <SubType>Designer</SubType>
      <DependentUpon>Form1.cs</DependentUpon>
    </EmbeddedResource>
 </ItemGroup>

(itemGroup - верхний уровень)
надо получить след инфу - Form1.resx, Form1.ru.resx

вот кусок кода

Код

private XmlDocument _xmlDocument = new XmlDocument();

public void ProcessProjectFile(FileInfo path)
{
    _xmlDocument.Load(path.FullName);
    Console.WriteLine("project file found");
    XmlNodeList _nodeList = _xmlDocument.GetElementsByTagName("EmbeddedResource");
    foreach(XmlNode _node in _nodeList)
    {
        string _value = _node.InnerText;
        Console.WriteLine(_value);
    }
}

таким образом я получаю только Designer, Form1.cs
а как обратится к атрибуту Include?

заранее спасибо.
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
ivashkanet
Дата 9.11.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Вот что у меня получилось:
Код

            string value;
            foreach (XmlNode node in xmlDocument)
            {
                foreach (XmlNode subNode in node)
                {
                    Console.WriteLine("\n" + subNode.Attributes["Include"].Value);

                    value = subNode.InnerText;
                    Console.WriteLine(value);
                }
            }

Т.е. "обратится к атрибуту Include" нужно через пропертю Attributes smile 
PM MAIL WWW ICQ   Вверх
_Dream
Дата 10.11.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



Спасибо, но что-то не получается.
выдает NullReferenceException на строке Console.WriteLine("\n" + subNode.Attributes["Include"].Value);
пишет Object reference not set to an instance of an object.
в чем может быть дело?
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
archimed7592
Дата 10.11.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



Цитата(_Dream @  10.11.2006,  10:58 Найти цитируемый пост)
выдает NullReferenceException
Код
            string value;
            foreach (XmlNode node in xmlDocument)
            {
                foreach (XmlNode subNode in node)
                {
                     XmlAttribute attr;
                     if ((attr = subNode.Attributes["Include"]) != null)
                     {
                            /* ... */
                     }
// ...



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
ivashkanet
Дата 10.11.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



_Dream, полный код в студию. Без всяких исправлений  smile smile

А так, на вскидку: subNode не может быть null так как мы по ним идем в foreach, получается такого атрибута нет у subNode  smile 
Скорее всего ты достаешь атрибут у <SubType> или у <DependentUpon>. Заметь, я удалил строку 
Цитата(_Dream @  8.11.2006,  18:48 Найти цитируемый пост)
XmlNodeList _nodeList = _xmlDocument.GetElementsByTagName("EmbeddedResource");
 
Потому что не смог добраться до второго нода EmbeddedResource таким образом smile 

P.S. и offtop: как можно получить второй нод из нодов EmbeddedResource используя _xmlDocument.Get[...]?

PM MAIL WWW ICQ   Вверх
archimed7592
Дата 10.11.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



Цитата(ivashkanet @  10.11.2006,  11:12 Найти цитируемый пост)
 как можно получить второй нод из нодов EmbeddedResource используя _xmlDocument.Get[...]?
Код
XmlNode second_node = xmlDocument.GetElementsByTagName("EmbeddedResource") [1];



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
ivashkanet
Дата 10.11.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(archimed7592 @  10.11.2006,  10:00 Найти цитируемый пост)
XmlNode second_node = xmlDocument.GetElementsByTagName("EmbeddedResource") [1];

 smile Да..... Эт я лажанулся  smile Меня, конечно, смутила буква s после GetElement, но я эту мысль продолжать не стал  smile 
PM MAIL WWW ICQ   Вверх
_Dream
Дата 10.11.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



может быть.. я просто xml совсем не знаю.. только начал изучать... все советы и предложения приветствуются smile а насчет строки
XmlNodeList _nodeList = _xmlDocument.GetElementsByTagName("EmbeddedResource");
разве убрав ее мы не будем смотреть все инклюды а не только находящиеся в узле EmbeddedResource??
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
_Dream
Дата 10.11.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



xml: в начале темы

код: 
Код

_xmlDocument.Load(path.FullName);
XmlNodeList _nodeList = _xmlDocument.GetElementsByTagName("EmbeddedResource");
string _value;
foreach (XmlNode _node in _nodeList)
{
    foreach (XmlNode _subNode in _node)
    {
        XmlAttribute _attr;
        if ((_attr = _subNode.Attributes["Include"]) != null)
        {
            Console.WriteLine("\n" + _subNode.Attributes["Include"].Value);
            _value = _subNode.InnerText;
            Console.WriteLine(_value);
            Console.WriteLine("check1"); 
        }
    }
    Console.WriteLine("check2"); 
}

результат - check1 - 0 раз check2 - 2 раза.. почему?
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
ivashkanet
Дата 10.11.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Так будет лучше:
Код

            _xmlDocument.Load(@"D:\asd.xml");

            XmlNodeList _nodeList = _xmlDocument.GetElementsByTagName("EmbeddedResource");
            string _value;
            foreach (XmlNode _node in _nodeList)
            {
                XmlAttribute _attr;
                if ((_attr = _node.Attributes["Include"]) != null)
                {
                    Console.WriteLine(_node.Attributes["Include"].Value);
                    _value = _node.InnerText;
                    Console.WriteLine(_value);
                    Console.WriteLine("check1");
                }

                Console.WriteLine("check2");
            }

            Console.ReadKey();

Я же говорил: 
Цитата(ivashkanet @  10.11.2006,  09:12 Найти цитируемый пост)
Заметь, я удалил строку...

Поэтому нужно убрать второй foreach

Добавлено @ 17:27 
Цитата(_Dream @  10.11.2006,  15:56 Найти цитируемый пост)
Console.WriteLine("check2"); 

А вообще, для этого есть точки останова  smile 
PM MAIL WWW ICQ   Вверх
_Dream
Дата 10.11.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



 smile спасибо за ответ тока что додумался сам
вот мой вариант 
Код

foreach (XmlNode _node in _nodeList)
{
    XmlAttribute _attr;
    if ((_attr = _node.Attributes["Include"]) != null)
    {
        Console.WriteLine("\n" + _node.Attributes["Include"].Value);
    }
}

все работает smile 

PS 
Цитата

А вообще, для этого есть точки останова    

никогда их не любил..  smile 

Это сообщение отредактировал(а) _Dream - 10.11.2006, 17:30
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
ivashkanet
Дата 10.11.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(_Dream @  10.11.2006,  16:29 Найти цитируемый пост)
спасибо 

Не за что  smile 
Цитата(_Dream @  10.11.2006,  16:29 Найти цитируемый пост)
никогда их не любил..  

Ты просто не умеешь их готовить  smile 
Если бы воспользовался ими, то понял, что в Console.WriteLine("check1"); не заходит только потому, что _node указывает на <SubType>, например.  smile 
PM MAIL WWW ICQ   Вверх
_Dream
Дата 30.11.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

Репутация: нет
Всего: нет



а вот еще вопрос возник у меня xml
  <data name="&gt;&gt;label1.Name" xml:space="preserve">
    <value>label1</value>
  </data>

к атрибуту name обратится легко . типа - _node.Attributes["name"];
а как мне получить значение из xml:space - что это вообще такое? это не 1 атрибут?
_node.Attributes["xml:space"]; не проходит.

ой чет я напутал smile все работает!

Это сообщение отредактировал(а) _Dream - 30.11.2006, 13:01
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.