LINQ to XML

今まで何回も目にしてきたけど、最近XMLを操作する必要がなくてLINQ to XMLを実際に触ったことがなかった(LINQ to Objectばっかり)。でも個人用ツールを作る際にXMLさんの出番が来たので、使ってみるべくようやく触りました。
.NET Framework 1.1時代にもXMLは良く使ってたけど、当時から比べたらすごい楽になったよなぁ。。。


簡単なテストコード

public void Test1()
{
	XElement xml =
		new XElement( "root",
			new XElement( "sub",
					new XElement( "data", 1 ),
					new XElement( "data", 2 ),
					new XElement( "data", 3 ),
					new XElement( "etc",
						new XElement( "foo", 10 ) ) ),

			new XElement( "sub",
					new XElement( "data", 4 ),
					new XElement( "data", 5 ),
					new XElement( "data", 6 ),
					new XElement( "etc",
						new XElement( "foo", 20 ) ) )
	);
	xml.Save( "test.xml" );
}

public void Test2()
{
	//XElement foo = XElement.Load( "test.xml" );
	XDocument xml = XDocument.Load( "test.xml" );
	Func<XElement, bool> evenp = (x => (int)x % 2 == 0);

	var result =
		from x in xml.Elements().SelectMany( e => e.Elements( "sub" ).Elements( "data" ) )
		where evenp( x )
		select new { Name = "でーた", x.Value };
	result.ToList().ForEach( Console.WriteLine );
}