繁体   English   中英

从XML文件读取

[英]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文件获取NameGrade

好吧,首先不是一个完整的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.

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