Как вытянуть данные узла температур из данного xml файла, который расположен по ссылке https://xml.meteoservice.ru/export/gismeteo/point/434.xml:
<MMWEATHER>
<REPORT type="frc3">
<TOWN index="434" sname="%D0%A1%D0%B8%D0%BC%D1%84%D0%B5%D1%80%D0%BE%D0%BF%D0%BE%D0%BB%D1%8C" latitude="45" longitude="34">
<FORECAST day="03" month="04" year="2019" hour="21" tod="3" predict="0" weekday="4">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="766" min="764"/>
<TEMPERATURE max="8" min="1"/>
<WIND min="1" max="4" direction="2"/>
<RELWET max="65" min="37"/>
<HEAT min="-1" max="-1"/>
</FORECAST>
<FORECAST day="04" month="04" year="2019" hour="03" tod="0" predict="0" weekday="5">
<PHENOMENA cloudiness="0" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="766" min="766"/>
<TEMPERATURE max="1" min="-1"/>
<WIND min="1" max="3" direction="3"/>
<RELWET max="77" min="65"/>
<HEAT min="-4" max="-4"/>
</FORECAST>
<FORECAST day="04" month="04" year="2019" hour="09" tod="1" predict="0" weekday="5">
<PHENOMENA cloudiness="0" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="766" min="766"/>
<TEMPERATURE max="8" min="-1"/>
<WIND min="3" max="5" direction="3"/>
<RELWET max="76" min="40"/>
<HEAT min="-4" max="-4"/>
</FORECAST>
<FORECAST day="04" month="04" year="2019" hour="15" tod="2" predict="0" weekday="5">
<PHENOMENA cloudiness="1" precipitation="10" rpower="0" spower="0"/>
<PRESSURE max="765" min="764"/>
<TEMPERATURE max="10" min="9"/>
<WIND min="1" max="4" direction="2"/>
<RELWET max="36" min="34"/>
<HEAT min="5" max="5"/>
</FORECAST>
</TOWN>
</REPORT>
</MMWEATHER>
Я попытался написать следующий код на C#, но при запуске я не получил ничего, кроме пустой консоли:
static void Main(string[] args)
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("https://xml.meteoservice.ru/export/gismeteo/point/434.xml");
XmlElement xRoot = xDoc.DocumentElement;
foreach (XmlNode xnode in xRoot)
{
foreach (XmlNode childnode in xnode.ChildNodes)
{
foreach (XmlNode childnode1 in childnode.ChildNodes)
{
if (childnode1.Name == "RELWET")
{
XmlNode attr = childnode1.Attributes.GetNamedItem("max");
XmlNode attr1 = childnode1.Attributes.GetNamedItem("min");
if (attr != null && attr1 != null)
{
Console.WriteLine(attr.Value);
Console.WriteLine(attr1.Value);
}
}
}
Console.WriteLine();
}
}
Console.Read();
}
То есть я пытался вытянуть значение аргументов min и max, но ничего не получилось
Если вам известно название тега, то можете использовать метод GetElementsByTagName
класса XmlDocument
:
foreach (XmlNode item in xDoc.GetElementsByTagName("TEMPERATURE"))
{
XmlNode attr = item.Attributes.GetNamedItem("max");
XmlNode attr1 = item.Attributes.GetNamedItem("min");
if (attr != null && attr1 != null)
{
Console.WriteLine(attr.Value);
Console.WriteLine(attr1.Value);
}
}
Оказывается проблема была в том, что я запутался во всех этих узлах, и не добавил обход по последнему узлу, поэтому ничего не выводилось.
static void Main(string[] args)
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("https://xml.meteoservice.ru/export/gismeteo/point/434.xml");
XmlElement xRoot = xDoc.DocumentElement;
foreach (XmlNode xnode in xRoot)
{
foreach (XmlNode childnode in xnode.ChildNodes)
{
foreach (XmlNode childnode1 in childnode.ChildNodes)
{
foreach (XmlNode childnode2 in childnode1.ChildNodes)
{
if (childnode2.Name == "TEMPERATURE")
{
XmlNode attr = childnode2.Attributes.GetNamedItem("max");
XmlNode attr1 = childnode2.Attributes.GetNamedItem("min");
if (attr != null && attr1 != null)
{
Console.WriteLine(attr.Value);
Console.WriteLine(attr1.Value);
}
}
//Console.WriteLine(childnode2.Name);
// XmlNodeList xmlNL = childnode1.ChildNodes;
//Console.WriteLine(xmlNL.Count);
}
}
Console.WriteLine();
}
}
Console.Read();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите пожалуйста, какой элемент формы (c# winforms vs2010 net40) может выполнять функции как на рисунке ниже, т
Я использую Stopwatch таймер для засекания времени выполнения участков кода в функциях моих проектовПо-хорошему, перед выходом из функции, в которой...
есть диалоговое окно с Switch и TextView, хочу при переключении Switch отображать или прятать TextViewНиже приведенный код не работает, пробовал на переключение...