2013-07-11 2 views
0

У меня есть ниже XMLКак преобразовать 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> 

Я хочу, чтобы преобразовать этот XML в словарь словарей с использованием LINQ

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 Гилл

ответ

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#, но вы должны быть в состоянии перевести его.

+1

Thanks Daniel Hilgarth, он работал как ожидалось. благодаря – gsgill76

+0

VB Версия :: Dim ldicRevisionTags Как словарь (Of String, словарь (Of String, List (Of String))) = document.Root.Elements ("Редакция"). ToDictionary (функция (х) CType (x.Attribute («name»), String), Функция (x) x.Element («MasterTags»). Элементы («MasterTag»). ToDictionary (Function (y) CType (y.Attribute («name») String), Функция (y) y.Element («ChildTags»). Элементы («ChildTag»). [Выбрать] (Функция (z) z.Value) .ToList())) – gsgill76

Смежные вопросы