次のような内容のサンプルを含む 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>
選択した PeriodGroup 内の Period ノードの子を読み取ることができる必要があります。それがより賢明であれば、PeriodNameはPeriodの属性になる可能性があると思います。
私はたくさんの例を見てきましたが、まったく正しいものはないようで、XmlReaderを使用するもの、XmlTextReaderを使用するもの、どちらも使用しないものなど、数十の異なる方法があるようです。Xmlファイルを読むのはこれが初めてなので、誰かが私にポインタを与えることができるかどうか尋ねると思いました. 試してみるためだけに機能するものがありますが、ぎこちなく感じます。私はVS2010とc#を使用しています。また、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);
}