遍历 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>
节点并将每个值存储在一个变量中。
我有一段代码从特定节点获取值并输出
它在文本字段上。
这是我目前的代码:
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
创建一个 class;
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;
我有一个 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>
节点并将每个值存储在一个变量中。
我有一段代码从特定节点获取值并输出 它在文本字段上。
这是我目前的代码:
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
创建一个 class;
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;