разбирать xml-файл с <...> на <... /> - PullRequest
1 голос
/ 11 февраля 2012

Проблема

У меня есть XML-файл с такой структурой

......................
<current_conditions>
  <condition data="partly cloudy"/>
  <temp_f data="2"/>
  <temp_c data="-17"/>
  <humidity data="Huminidy: 66 %"/>
  <icon data="/ig/images/weather/partly_cloudy.gif"/>
  <wind_condition data="Wind: С, 2 м/с"/>
</current_conditions>
<forecast_conditions>
  <day_of_week data=""/>
  <low data="-23"/>
  <high data="-14"/>
  <icon data="/ig/images/weather/mostly_sunny.gif"/>
  <condition data="Mostly sunny"/>
</forecast_conditions>
.....................

Я разбираю это так

               while (r.Read())
                {
                    if (r.NodeType == XmlNodeType.Element)
                    {
                        if (r.Name == "current_conditions")
                        {
                            string temp = "";
                            while (r.Read() && r.Name!="forecast_conditions")//I've addee this condition because it parse all nodes after "current conditions"
                            {
                                if (Current_Condtions.Contains(r.Name))
                                {
                                    temp += r.GetAttribute("data");
                                    temp += "\n";
                                }
                            }
                            Console.WriteLine(temp);
                        }
                    }
                }

Я добавил условия, но он по-прежнему считывает файл до конца, но я хочу только проанализировать от <current_conditions> до </current_conditions> и затем прекратить чтение файла XML. Как это сделать?

Ответы [ 3 ]

1 голос
/ 11 февраля 2012

вам нужен оператор break в тот момент, когда вы сделали то, что хотели.

1 голос
/ 11 февраля 2012

Самый простой способ - добавить оператор break; после того, как вы получите необходимые данные.

Более чистый способ - использовать метод ReadSubtree. Использовать его длясоздайте новый читатель, как только вы окажетесь на узле current_conditions.Тогда он будет читать только этот узел и его дочерние элементы.

Что-то вроде

r.ReadToFollowing("current_conditions")
subtree = r.ReadSubtree()
while(subtree.Read())
{
    //Do your stuff with subtree...
}
0 голосов
/ 11 февраля 2012

Попробуйте использовать атрибут innerXML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...