私のXMLはこのように見えます。 n個のモジュールとn個の割り当てを含むことができます。割り当ては、それが含まれているモジュール内にネストされています特定の要素にアクセスしてデータを取得する方法XML
<?xml version="1.0"?>
<Course name="engineering">
<Level4>
<Module Name="electric" CreditVal="22">
<Assignment Name="wer" Score="22" Weight="50">
</Assignment>
<Assignment Name="asd" Score="50" Weight="50">
</Assignment>
</Module>
<Module Name="materials" CreditVal="22">
<Assignment Name="ghj" Score="22" Weight="75>
</Assignment>
<Assignment Name="kl" Score="80" Weight="15">
</Assignment>
</Module>
</Level4>
</Course>
私は、次のことで、モジュールおよび割り当てをアクセスしていますが:
起こることになって何XPathDocument xpd = new XPathDocument("XMLFile.xml");
//getting modules in level 4
foreach (XPathNavigator mod in xpd.CreateNavigator().Select("/Course/Level4/Module"))
{
//Accessing module elemtns
if (mod.HasAttributes)
{
Module modtoadd = new Module();
modtoadd.Name = mod.GetAttribute("Name", "");
Console.WriteLine("module name: " + modtoadd.Name);
modtoadd.CreditValue = int.Parse(mod.GetAttribute("CreditVal", ""));
Console.WriteLine("module cred: " + modtoadd.CreditValue);
modtoadd.Assignments = new List<Assignment>();
//Accessing assignment elements within the module element
foreach (XPathNavigator asgn in xpd.CreateNavigator().Select("Course/Level4/Module/Assignment"))
{
Assignment asn = new Assignment();
asn.Name = asgn.GetAttribute("Name", "");
Console.WriteLine(asn.Name);
asn.Weighting = int.Parse(asgn.GetAttribute("Weight", ""));
Console.WriteLine(asn.Weighting);
asn.UsersScore = int.Parse(asgn.GetAttribute("Score", ""));
Console.WriteLine(asn.UsersScore);
modtoadd.Assignments.Add(asn);
};
courseXML.Level_41.Add(modtoadd);
}
};
:XMLReaderがでネストされた割り当てを読み込みますそれが存在する相対的なモジュールモジュールスコアを合計すると 'eletric'は72になり、 'materials'は102になります。
実際に何が起こったのですか:テストした後、私はロジックに問題があることを認識しました。これは、1つのモジュールが保存されているときにうまく動作しますが、複数のモジュールがある場合、すべての割り当てがすべてのモジュールに追加されます。モジュールスコアを合計すると、材料と電気は両方とも価値があります。
私はXMLを読んでいないし、ファイルを読み書きしています。助けてくれてありがとう:
ところで、あなたのxml(module 'materials'-> assignment' ghj')には、閉じられていないquotがあります。 – Xiaoy312