0

xml ドキュメントをクエリして、特定の要素のサブ要素/属性のリストを返すにはどうすればよいですか。

var entry = from item in doc.Descendants("GROUP")
                        where (string)item.Attribute("meetsMark") == "1"
                        select new
                        {                                
                            code = (string)item.Attribute("code"),                               
                        };

上記は、meetsMark 属性が「1」である要素 GROUP に属するエントリのみを返します。コードを返す要素ごとに、含まれるすべての SUMMARY 属性の「合計」と「数値」のリストも取得する必要があります。例: クエリを返す必要があります。

コード = セカンダリ

合計 = SUM1

数 = 1

合計 = SUM3

数 = 3

合計 = SUM4

数 = 4

コード=THIRD

合計 = SUM10

数 = 1

合計 = SUM30

数 = 3

合計 = SUM40

数 = 4

以下はxml構造です。

<GROUP
    id="GRP2"
    code="MAIN"             
    meetsMark="0"

    <GROUP
        id="GRP3"               
        code="SECONDARY"    
        meetsMark="1"

            <ITEMS>
                <ITEM
                    id="ITM6"                           

                    <SUMMARY
                        sum="SUM1"
                        number="1"                                                      

                    </SUMMARY>
                </ITEM>
                <ITEM
                    id="ITM14"                          

                    <SUMMARY
                        sum="SUM3"
                        number="3"                                                      

                    </SUMMARY>                          
                </ITEM>
                <ITEM
                    id="ITM15"                          

                    <SUMMARY
                        sum="SUM4"
                        number="4"                          

                    </SUMMARY>                          
                </ITEM>                     
            </ITEMS>                    
        </GROUP>
        <GROUP
        id="GRP4"               
        code="THIRD"    
        meetsMark="1"

            <ITEMS>
                <ITEM
                    id="ITM95"                          

                    <SUMMARY
                        sum="SUM10"
                        number="1"                                                      

                    </SUMMARY>
                </ITEM>
                <ITEM
                    id="ITM96"                          

                    <SUMMARY
                        sum="SUM30"
                        number="3"                                                      

                    </SUMMARY>                          
                </ITEM>
                <ITEM
                    id="ITM97"                          

                    <SUMMARY
                        sum="SUM40"
                        number="4"                          

                    </SUMMARY>                          
                </ITEM>                     
            </ITEMS>                    
        </GROUP>
</GROUP>            

4

1 に答える 1

0

このようなものになります...(わかりやすくするために改行を省略しています)

var groups = from group in doc.Descendants("GROUP")
            where (string)group.Attribute("meetsMark") == "1"
            select group

var subgroups = from subgroup in groups.Descendants("GROUP")
           where subgroup.Attribute("code").Value == "SECONDARY"
           select subgroup;

foreach( var subgroup in subgroups )
{
   System.Console.WriteFormat( "code = {0}", subgroup.Attribute("code").Value );

   var sums = from summary in subgroup.Descendants("SUMMARY")

   foreach( var sum in sums )
   {
       System.Console.WriteFormat( "sum = {0}", subgroup.Attribute("sum").Value );
       System.Console.WriteFormat( "number = {0}", subgroup.Attribute("number").Value );
   }
}
于 2013-05-02T16:13:22.967 に答える