繁体   English   中英

遍历xml文件并将内容存储在Textfield C#中

[英]Iterate through xml file and store content inside Textfield c#

我有一个Xml文件,我想在其中循环通过每个递增1的模块节点。这是我的xml文件的示例:

<PersonDetails>
  <PersonTitle>Teacher</PersonTitle>
  <Keystage3>
    <Subject>
      <subjectName>maths</subjectName>
      <subjectId>qq1</subjectId>
      <subjectvalue>20</subjectvalue>
      <subjectscore />
    </Subject>
    <Subject>
      <subjectName>science</subjectName>
      <subjectId>sla1s</subjectId>
      <subjectvalue>25</subjectvalue>
      <subjectscore />
    </Subject>
  </Keystage3>
</PersonDetails>

我想遍历xml文件并获取两个<Subject>节点的Subject的所有数据,并将每个值存储在一个变量中。

我有一段代码从特定节点获取值并将其输出到文本字段中。

这是我到目前为止的代码:

public partial class Form1 : Form
{
    private string subName, subId, subvalue;

    public XmlDocument Doc;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        XmlTextReader reader = new XmlTextReader("data.xml");
        XmlNodeType type;

        while (reader.Read()) {

            type = reader.NodeType;

            if(type == XmlNodeType.Element)
            {

                    if (reader.Name == "subjectName")
                    {
                        reader.Read();
                        textBox1.Text = reader.Value;
                    }
                    if (reader.Name == "subjectId")
                    {
                        reader.Read();
                        textBox2.Text = reader.Value;
                    }
                    if (reader.Name == "subjectvalue")
                    {
                        reader.Read();
                        textBox3.Text = reader.Value;
                   }


            }
        }
        reader.Close();


    }

我如何才能使接收到的输出类似于:

{maths,qq1,20}
{science,sla1s,25}

您可以使用XDocument来执行它。 如果要将节点值存储为一个集合,则可以像这样为SubjectNode创建一个类。

        public class SubjectNode
        {
            public string SubjectName { get; set; }
            public string SubjectId { get; set; }
            public string SubjectValue { get; set; }
        }

然后,您可以像这样检索数据。

        var xdoc = XDocument.Load("data.xml");
        var keystageNode = xdoc.Descendants("Keystage3").FirstOrDefault();
        var iterateNode = keystageNode.FirstNode;
        var subjectNodes = new List<SubjectNode>();
        while (iterateNode != null)
        {
            var node = (XElement)iterateNode.NextNode;
            subjectNodes.Add(new SubjectNode
            {
                SubjectName = node.Element("subjectName").Value,
                SubjectId = node.Element("subjectId").Value,
                SubjectValue = node.Element("subjectvalue").Value
            });
            iterateNode = iterateNode.NextNode;
        }

使用一些LINQ-Magic,您可以执行以下操作:

XElement root = XElement.Load("data.xml");
        var subjects = from subject in root.Descendants()
                          where subject.Name.LocalName.Contains("Subject")
                          select new
                          {
                              SubjectName = subject.Element("subjectName").Value,
                              SubjectId = subject.Element("subjectId").Value,
                              SubjectValue = subject.Element("subjectvalue").Value
                          };

foreach (var subject in subjects)
{
    Console.WriteLine(subject);

    //you can use subject like this:
    string subjectName = subject.SubjectName;
    string subjectId = subject.SubjectId;
    string subjectValue = subject.SubjectValue;
}

这将打印:

{ SubjectName = maths, SubjectId = qq1, SubjectValue = 20 }
{ SubjectName = science, SubjectId = sla1s, SubjectValue = 25 }

包括:

using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM