2011-12-28 2 views
0

У меня есть файл XML, который имеет несколько тегов, как это:Перебор документа XML и назначая данные в переменных C#

<sitecollection name=""> 
    <site name=""> 
    <maingroup name=""> 
     <group name=""> </group> 
    </maingroup> 
    </site> 
<sitecollection> 

Идея заключается в том, чтобы перебрать все sitecollection и это дочерние элементы в документе XML , и сохраните информацию в переменных. Проблема, с которой я сталкиваюсь, заключается в сохранении дочерних элементов с их атрибутами.

До сих пор у меня есть следующий код:

class xmlreader 
{ 
    public static void Main() 
    { 
     XDocument xdoc = XDocument.Load("xmldocument.xml"); 
     var result = new System.Text.StringBuilder(); 
     var lv1s = from lv1 in xdoc.Descendants("sitecollection") 
        select new 
        { 
         siecollection = lv1.Attribute("name").Value, 
         maingroup = lv1.Descendants("group") 

        }; 
     foreach (var lv1 in lv1s) 
     { 
      result.AppendLine(lv1.siecollection); 
      foreach (var lv2 in lv1.maingroup) 
       result.AppendLine(" " + lv2.Attribute("name").Value); 
     } 

    } 
} 
+0

Что проблема у вас возникли? Не знаете, в чем проблема. – scartag

+0

Код, который вы использовали, не содержит ничего, что могло бы сохранить XmlDocument. Была ли эта часть опущена? –

+0

Ну код еще не закончен ... Я пытаюсь прочитать XML-документ и распечатать результаты ... – MXV

ответ

1

Если образец XML вы предоставили точно, проблема, вероятно, что вы не имеете закрывающий тег для sitecollection.

Я попробовал ваш код с немного разнообразным вводом XML (закрыл sitecollection тег, и добавлены некоторые значения атрибутов имени, так что будет что-то, чтобы собрать в результате StringBuilder) следующим образом:

XDocument xdoc = XDocument.Parse(@"<sitecollection name=""collectionName""> 
    <site name=""sitename""> 
    <maingroup name=""maingroupname""> 
    <group name=""groupname""> </group> 
    </maingroup> 
    </site> 
    </sitecollection> 
    "); 

и result.ToString() производит: "CollectionName \ г \ п имя_группы \ г \ п"

+0

Извините. Правильный образец будет иметь, и они будут находиться под элементом . – MXV

0

Возьмите это, где вы будете:

XmlReader reader = XmlReader.Create(@"C:\file.xml", null); 
    StringBuilder result = new StringBuilder(); 
    while (reader.Read()) 
    {    
     if(reader.NodeType == XmlNodeType.Element) 
     { 
      if (reader.HasAttributes) 
      { 
       result.AppendLine(reader.LocalName); 
       reader.MoveToFirstAttribute(); 
       result.AppendLine(" " + reader.Value);      
      } 
     }      
    } 
Смежные вопросы