restofwaterimpのぎじゅつMemo

SIerに所属。企画から運用まで幅広くやってます。C#中心に書いてます。

【C#】C#プログラミングのイディオム(11章)XMLの操作

前回のつづき

restofwaterimp.hatenablog.com

XMLJSONでデータ連係をすることもあるので、 その流れかなと。11章はXMLで12章はJSON

プレーンテキストからXMLJSONに変換し、他システムへ連係することがあるため イディオムに載っているのだろうと思われる章。

章の初めにはLINQ to XMLの話・・・と書いてありますが。 LINQ to Objectが理解できていれば、構文はほぼ同じなので、 そこまで苦労しないと思います。

XDocument のクエリと XElement のクエリ (C#) | Microsoft Docs

ファイルをloadするとき、XDocumentを利用するか、XElementを利用するかによって、 ルートを含んで全ての要素を取得するか否かが異なります。 そこには注意。

 var xdoc = XDocument.Load(@"/Users/xxxxx/Downloads/CSharpPhraseBook/Chapter11/Section02/novelists.xml");
            var xelements = xdoc.Root.Elements().OrderBy(x => (string)(x.Element("name").Attribute("kana")));
            foreach (var xnovelist in xelements)
            {
                XElement xname = xnovelist.Element("name");
                var birth = (DateTime)xnovelist.Element("birth");
                Console.WriteLine("{0} {1}", xname.Value, birth.ToShortDateString());

            }
            foreach (var xnovellist in xdoc.Root.Elements())
            {
                var name = xnovellist.Element("name");
                var works = xnovellist.Element("masterpieces")
                                      .Elements("title")
                                      .Select(x => x.Value);
                Console.WriteLine("{0} - {1}", name.Value, string.Join(",", works));


            }
            var filename = @"/Users/xxxx/Downloads/CSharpPhraseBookAnswer/Chap11/Exercise2/Sample.xml";

            var xdoc = XDocument.Load(filename);
/*xmlファイルを読み込みつつ、出力用のデータを作成。word要素に、属性kanji,yomiを設定したものをXElement属性で取得*/
            var lists = xdoc.Root.Elements().Select(x =>
                new XElement("word",
                            new XAttribute("kanji", x.Element("kanji").Value),
                            new XAttribute("yomi", x.Element("yomi").Value))
                                                   );

            var root = new XElement("difficaltkanji", lists);

            Console.WriteLine(root);
            root.Save(@"/Users/xxxx/Downloads/CSharpPhraseBookAnswer/Chap11/Exercise2/attribute.xml");

今回は内容が少ないですが、これで終了。 文字列操作なので、実際に文章を作成し、加工するトレーニングが良いのではと思い、実践します。

つづく