Я создал файл Xml с содержимым примера следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<Periods>
<PeriodGroup name="HER">
<Period>
<PeriodName>Prehistoric</PeriodName>
<StartDate>-500000</StartDate>
<EndDate>43</EndDate>
</Period>
<Period>
<PeriodName>Iron Age</PeriodName>
<StartDate>-800</StartDate>
<EndDate>43</EndDate>
</Period>
<Period>
<PeriodName>Roman</PeriodName>
<StartDate>43</StartDate>
<EndDate>410</EndDate>
</Period>
</PeriodGroup>
<PeriodGroup name="CAFG">
<Period>
<PeriodName>Prehistoric</PeriodName>
<StartDate>-500000</StartDate>
<EndDate>43</EndDate>
</Period>
<Period>
<PeriodName>Roman</PeriodName>
<StartDate>43</StartDate>
<EndDate>410</EndDate>
</Period>
<Period>
<PeriodName>Anglo-Saxon</PeriodName>
<StartDate>410</StartDate>
<EndDate>800</EndDate>
</Period>
</PeriodGroup>
</Periods>
Мне нужно иметь возможность читать дочерние элементы Period node в пределах выбранной группы PeriodGroup. Я думаю, что PeriodName может быть атрибутом Периода, если это более разумно.
Я просмотрел множество примеров, но ни один из них не кажется вполне правильным, и, похоже, существуют десятки разных методов, некоторые из которых используют XmlReader, некоторые XmlTextReader и некоторые из них не используются. Поскольку это мой первый раз, когда я читал Xml файл, я думал, что спрошу, может ли кто-нибудь дать мне указатель. У меня есть что-то работающее, чтобы попробовать что-то, но оно неуклюже. Я использую VS2010 и С#. Кроме того, я вижу, что многие люди используют LINQ-Xml, поэтому я буду благодарен за плюсы и минусы использования этого метода.
string PG = "HER";
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("./Xml/XmlFile.xml"));
string text = string.Empty;
XmlNodeList xnl = doc.SelectNodes("/Periods/PeriodGroup");
foreach (XmlNode node in xnl)
{
text = node.Attributes["name"].InnerText;
if (text == PG)
{
XmlNodeList xnl2 = doc.SelectNodes("/Periods/PeriodGroup/Period");
foreach (XmlNode node2 in xnl2)
{
text = text + "<br>" + node2["PeriodName"].InnerText;
text = text + "<br>" + node2["StartDate"].InnerText;
text = text + "<br>" + node2["EndDate"].InnerText;
}
}
Response.Write(text);
}