C# 使用XMLTextReader将XML读入Windows窗体

C# 使用XMLTextReader将XML读入Windows窗体,c#,xml,winforms,visual-studio,C#,Xml,Winforms,Visual Studio,以下是我的XML: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!--This is an XML Generated File--> <Subjects> <Subject> <Name>CG</Name> <TotalLectures>25</TotalLectures> <AttendedLe

以下是我的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>

但这并没有正确显示主题的细节。我真的需要让它为我的项目工作我假设当用户选择一个主题时,存储在变量中的主题id表示它
SubjectId
。然后,可以使用XDocument和LINQ执行以下操作:

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.子体(“Name”)
    将返回标记为“Name”的所有元素,然后
  • .FirstOrDefault(o=>o.Value==SubjectId)
    将过滤以前的结果,以仅返回具有
    值的第一个元素
    等于
    SubjectId
    ,或者如果未找到匹配的元素,则返回null,然后
  • .Parent
    将返回上一个结果元素的父元素-本例中的Subject标记-Name标记-。因此,
    subjectNode
    将包含用户所选主题的主题标签

XML中有两个主题,表示有6个细节元素要显示。您希望它们如何显示在3个文本框中?我需要一次显示一个主题的详细信息。XML文件中可能有8-9个主题,但Winform只显示一个(由用户选择)。这太棒了!我希望现在能找到林克。这看起来很简单。谢谢(y) 如果我想更新任何现有的元素,那么我该怎么做呢?我是否可以将上述代码更改为subjectNode.Element(“TotalArchitectures”)。Value=50?这行吗?@Rajat是的,如果在修改结束时将
doc
返回到xml文件:
doc.Save(“xmldata.xml”)是的,我设法做到了。我完成了我的申请!非常感谢你!
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;