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