2011-12-28 46 views
0

我有了幾個標籤像這樣的XML文件:通過一個XML文檔循環和分配數據

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

的想法是遍歷XML文檔中的所有sitecollection和它的子元素,並將信息保存在變量中。我遇到的問題是保存子元素及其屬性。

到目前爲止,我有以下代碼:

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 2011-12-28 17:27:11

+0

您共享的代碼不包含任何可以保存XmlDocument的內容。那部分被遺漏了嗎? – 2011-12-28 17:39:46

+0

那麼代碼沒有完成...我試圖讀取XML文檔並打印結果... – MXV 2011-12-28 18:56:57

回答

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()產生: 「集合名\ r \ n組名\ r \ n」 個

+0

對不起。正確的示例將具有,它們將在元素下。 – MXV 2011-12-28 18:46:38

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);      
      } 
     }      
    }