読者です 読者をやめる 読者になる 読者になる

LINQ to XML使ってみた

機能はMSXML使ってみた2のものとほぼ同じ。
DOMでは欲しい情報を得るのに回り道をしてたような感覚だったんだけど、こっちはすっきり書けますね。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace LinqToXML1
{
	class Program
	{
		static void Main(string[] args)
		{
			Console.WriteLine("Input generation:");
			string inGen = Console.ReadLine();

			var doc = XDocument.Load("sazae.xml");
			IEnumerable<XElement> selectedPerson =
				from person in doc.Element("member").Elements("person")
				where person.Attribute("gen").Value == inGen
				select person;

			foreach (XElement person in selectedPerson)
			{
				Console.WriteLine((string)person.Element("name"));
			}

			return;
		}
	}
}
追記

C++C#の比較はずるいかな?と思いC#版DOMも書いてみました。C#だとそこまで長くなりませんね。

using System;
using System.Collections.Generic;
using System.Xml;

namespace CSXML
{
	class Program
	{
		static void Main(string[] args)
		{
			Console.WriteLine("Input generation:");
			string inGen = Console.ReadLine();

			var xmlData = new XmlDocument();
			xmlData.Load("sazae.xml");

			foreach ( XmlElement person in xmlData.GetElementsByTagName("person") )
			{
				if ( person.GetAttribute("gen") == inGen ) {
					foreach ( XmlElement elem in person.ChildNodes ) {
						if ( elem.Name == "name" ) {
							Console.WriteLine(elem.InnerText);
							break;
						}
					}
				}
			}

			return;
		}
	}
}