[英]Reading from XML file
我有一个像这样的XML文件:
<students>
<student rollNo="1" Name ="A" Grade="A"/>
<student rollNo="2" Name ="B" Grade="A"/>
<student rollNo="3" Name ="C" Grade="A"/>
<student rollNo="4" Name ="D" Grade="A"/>
</students>
我需要通过提供rollNo
从XML文件获取Name
和Grade
。
好吧,首先不是一个完整的XML文件。 但是,假设您实际上已经有了以下内容:
<students>
<student rollNo="1" Name ="A" Grade="A"/>
<student rollNo="2" Name ="B" Grade="A"/>
<student rollNo="3" Name ="C" Grade="A"/>
<student rollNo="4" Name ="D" Grade="A"/>
</students>
您可以使用以下方式:
XDocument doc = XDocument.Load(filename);
XElement element = doc.Root
.Elements("student")
.Where(x => (int?) x.Attribute("rollNo") == rollNo);
string name = (string) x.Attribute("Name");
string grade = (string) x.Attribute("Grade");
您可以编写类似以下内容(C#2):
using System;
using System.Xml;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string path = @"D:\stack.xml";
string[] result = ParseXmlFile(path, 2);
}
private static string[] ParseXmlFile(string path, int rollNo)
{
XmlReaderSettings xtrs = new XmlReaderSettings();
xtrs.IgnoreComments = true;
xtrs.IgnoreProcessingInstructions = true;
xtrs.IgnoreWhitespace = true;
using (XmlReader xtr = XmlReader.Create(path, xtrs))
{
while (xtr.Read())
{
if (xtr.Name == "students")
{
return ParseStudent(xtr, rollNo);
}
}
}
throw new ArgumentException();
}
private static string[] ParseStudent(XmlReader reader, int rollNo)
{
while (reader.Read())
{
if (reader.Name == "student")
{
string _name = string.Empty;
string _grade = string.Empty;
int _rollNo = 0;
while (reader.MoveToNextAttribute())
{
switch (reader.Name)
{
case "Name":
_name = reader.Value;
break;
case "Grade":
_grade = reader.Value;
break;
case "rollNo":
_rollNo = Convert.ToInt32(reader.Value);
break;
default:
break;
}
}
if (_rollNo == rollNo)
return new string[] { _name, _grade };
}
}
throw new ArgumentException();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.