none
LINQ to XMLで一覧を取得 RRS feed

  • 質問

  • 以下のようなCategory要素内に子要素Personが複数存在するXMLファイルがあります。

    Age属性が入っているPerson要素の一覧を取得したいと思っているのですが、1回のLinq To XMLのクエリーでで取得することは可能なのでしょうか?

     

    <?xml version="1.0" encoding="utf-8" ?>
    <root>
     <Category class="a" >
      <Person name="taro" Age="23" />
      <Person name="jiro" Age="30"/>
     </Category>
     <Category class="b">
      <Person name="sato"  />
     </Category>
     <Category class="c">
      <Person name="suzuki" />
      <Person name="naomi" Age="20"/>
     </Category>
    </root>

     

    2008年1月23日 6:13

回答

  •  

    以下のプログラムを実行してみてください。

     

    using System;
    using System.Linq;
    using System.Xml.Linq;

    namespace ConsoleApplication4
    {
        class Program
        {
            static void Main(string[] args)
            {
                XDocument People = XDocument.Parse(
    @"<?xml version=""1.0"" encoding=""utf-8\"" ?>
    <root>
     <Category class=""a"" >
      <Person name=""taro"" Age=""23"" />
      <Person name=""jiro"" Age=""30""/>
     </Category>
     <Category class=""b"">
      <Person name=""sato""  />
     </Category>
     <Category class=""c"">
      <Person name=""suzuki"" />
      <Person name=""naomi"" Age=""20""/>
     </Category>
    </root>
    ");

                var query = from p in People.Descendants("Person")
                            where p.Attribute("Age") != null
                            select p;

                foreach (var item in query)
                {
                    Console.WriteLine(item);
                }
            }

        }
    }

    2008年1月23日 7:34

すべての返信

  •  

    以下のプログラムを実行してみてください。

     

    using System;
    using System.Linq;
    using System.Xml.Linq;

    namespace ConsoleApplication4
    {
        class Program
        {
            static void Main(string[] args)
            {
                XDocument People = XDocument.Parse(
    @"<?xml version=""1.0"" encoding=""utf-8\"" ?>
    <root>
     <Category class=""a"" >
      <Person name=""taro"" Age=""23"" />
      <Person name=""jiro"" Age=""30""/>
     </Category>
     <Category class=""b"">
      <Person name=""sato""  />
     </Category>
     <Category class=""c"">
      <Person name=""suzuki"" />
      <Person name=""naomi"" Age=""20""/>
     </Category>
    </root>
    ");

                var query = from p in People.Descendants("Person")
                            where p.Attribute("Age") != null
                            select p;

                foreach (var item in query)
                {
                    Console.WriteLine(item);
                }
            }

        }
    }

    2008年1月23日 7:34
  • どっとねっとふぁんさん。

    こんにちは。

    いつもブログ参考にさせてもらってます。

    早速の回答、ありがとうございました。

    親要素をまたいでもしっかりAgeが入った一覧を取得できました。

     

     

    2008年1月23日 8:19