0

我有以下 XML

    <?xml version="1.0" encoding="UTF-8"?>
    <Revisions>
        <Revision name="R1">
            <MasterTags>
                <MasterTag name="MT1">
                    <ChildTags>
                        <ChildTag>CT1</ChildTag>
                    </ChildTags>
                </MasterTag>
                <MasterTag name="MT2">
                    <ChildTags>
                        <ChildTag>CT4</ChildTag>
                    </ChildTags>
                </MasterTag>
        </Revision>
        <Revision name="R2">
            <MasterTags>
                <MasterTag name="MT6">
                    <ChildTags>
                        <ChildTag>CT21</ChildTag>
                        <ChildTag>CT22</ChildTag>
                        <ChildTag>CT23</ChildTag>   
                    </ChildTags>
                    </MasterTag>
                <MasterTag name="MT7">
                    <ChildTags>
                        <ChildTag>CT24</ChildTag>
                        <ChildTag>CT25</ChildTag>
                        <ChildTag>CT26</ChildTag>   
                    </ChildTags>
                </MasterTag>
         </Revision>
   </Revisions>

我想使用 LINQ 将此 XML 转换为字典词典

Dim dicRevisionTags As New Dictionary(Of String, Dictionary(Of String, List(Of String)))

我尝试使用

 Dim document = XDocument.Load("Inputxml.xml")

也像

Dim ccc = document.Elements("Revisions").ToDictionary(Function(e) e.Elements("Revision").ToDictionary(Function(d) d.Elements("MasterTags")))

但无法构建提供输出的 LINQ

R1-> key, Value( M1, list(of CT1))
        , Value( M2, list(of CT4))

R2-> key, Value( M6, list(of CT21
                             CT22
                             CT23))
        , Value( M7, list(of CT24
                             CT25
                             CT26))

谢谢 Gurpreet Gill

4

1 回答 1

2

您可以使用以下内容:

var result = 
    doc.Root
       .Elements("Revision")
       .ToDictionary(x => (string)x.Attribute("name"),
                     x => x.Element("MasterTags")
                           .Elements("MasterTag")
                           .ToDictionary(y => (string)y.Attribute("name"),
                                         y => y.Element("ChildTags")
                                               .Elements("ChildTag")
                                               .Select(z => (string)z)
                                               .ToList()));

它是 C#,但您应该能够翻译它。

于 2013-07-11T09:50:02.027 回答