0

如何查询 xml 文档以返回特定元素的子元素/属性列表。

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

以上仅返回属于元素 GROUP 的条目,其中 meetMark 属性为“1”。对于它返回代码的每个元素,我还需要获取它包含的每个SUMMARY属性的“总和”和“数字”列表。示例:我需要查询返回:

代码 = 次要

总和 = SUM1

数字 = 1

总和 = SUM3

数字 = 3

总和 = SUM4

数字 = 4

代码=第三

总和 = 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 回答