这是我的XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--This is an XML Generated File-->
<Subjects>
<Subject>
<Name>CG</Name>
<TotalLectures>25</TotalLectures>
<AttendedLectures>20</AttendedLectures>
</Subject>
<Subject>
<Name>ISM</Name>
<TotalLectures>40</TotalLectures>
<AttendedLectures>37</AttendedLectures>
</Subject>
</Subjects>
我需要阅读这些元素(Name,TotalLectures,AttendedLectures)并将它们显示在3个单独的文本框中。但我无法取得成果。
我正在使用XMLTextReader,因为Linq到XML,XPath和其他似乎有点复杂。
这是我能得到的最接近的(使用StackOverflow上另一个问题的帮助):
XmlTextReader reader = new XmlTextReader("xmldata.xml");
reader.Read();
while (reader.Read())
{
if (reader.Name == "Name")
{
textBox1.Text = reader.ReadString();
}
if (reader.Name == "TotalLectures")
{
textBox2.Text = reader.ReadString();
}
if (reader.Name == "AttendedLectures")
{
textBox3.Text = reader.ReadString();
}
}
但这并没有正确显示主题的细节。我真的需要为我的项目工作! :S
答案 0 :(得分:0)
我假设当用户选择主题时,存储在变量中的主题ID称为SubjectId
。然后,您可以使用带有LINQ的XDocument执行以下操作:
var doc = XDocument.Load("xmldata.xml");
var subjectNode = doc.Descendants("Name").FirstOrDefault(o => o.Value == SubjectId).Parent;
textBox1.Text = subjectNode.Element("Name").Value;
textBox2.Text = subjectNode.Element("TotalLectures").Value;
textBox3.Text = subjectNode.Element("AttendedLectures").Value;
doc.Descendants("Name")
将返回标记为“Name”的所有元素,然后.FirstOrDefault(o => o.Value == SubjectId)
会过滤以前的结果,只返回Value
等于SubjectId
的第一个元素,如果找不到匹配的元素,则返回null,然后.Parent
将返回父元素 - 本例中为主题标记 - 前一个结果元素 - 名称标记 - 。因此subjectNode
将包含用户所选主题的主题标记。