问题描述:

I have a XML file like this:

<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>

I need to get Name and Grade from XML file by supplying rollNo.

网友答案:

You can write something like this (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();
        }
    }
}
网友答案:

Well, to start with that's not a complete XML file. However, assuming you've actually got something like this:

<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>

you can use something like this:

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");
相关阅读:
Top