2013-02-07 91 views
-1

我想從我的數據創建XML數據,創建成功但輸出是壞的我該如何解決這個問題?C#:使用Linq沒有正確的輸出創建XML文檔?

這裏是我的代碼:

private void btnGenerate_Click(object sender, EventArgs e) 
    { 
     XElement xml = new XElement("Navigation", 
      new XElement("NavigationSets")); 
     foreach (DataRow row_navs in GetNavigationSets().Rows) 
     { 
      xml.Add(new XElement("NavigationName", row_navs["name"].ToString())); 
      foreach (DataRow row_sets in GetMenusInNavigationSetByNavigation(2).Rows) 
      { 
       if (int.Parse(row_sets["id"].ToString()) == int.Parse(row_navs["id"].ToString())) 
       { 
        foreach (DataRow row_menus in GetMenuById(int.Parse(row_sets["menu_id"].ToString())).Rows) 
        { 
         xml.Add(new XElement("MenuName", row_menus["name"].ToString())); 
        } 
       } 
      } 
     } 
     xml.Save("data.xml"); 
    } 

林期待這樣

<?xml version="1.0" encoding="utf-8"?> 
<Navigation> 
    <NavigationSets> 
     <NavigationName> 
      <MenuName></MenuName> 
     </NavigationName> 
    <NavigationSets/> 
</Navigation> 

的輸出。在我當前的代碼我的輸出是這樣的

<?xml version="1.0" encoding="utf-8"?> 
<Navigation> 
    <NavigationSets/> 
     <NavigationName></NavigationName> 
    <MenuName></MenuName> 
</Navigation> 
+3

這不是有效的XML。 ''將是''或''。 – DaveShaw

+0

對不起,檢查它!更新的問題 – MekeniKine

回答

1

看你的時候」重新添加元素:

xml.Add(new XElement("NavigationName", row_navs["name"].ToString())); 
xml.Add(new XElement("MenuName", row_menus["name"].ToString())); 

哪裏xml是這樣的元素:

XElement xml = new XElement("Navigation", 
      new XElement("NavigationSets")); 

這意味着xmlNavigation元素,NavigationSets元素。我懷疑你想要類似的東西:

XElement outer = new XElement("Navigation"); 
XElement inner = new XElement("NavigationSets"); 
outer.Add(inner); 

...然後加到inner

+0

yeh它的工作,現在我的問題是MenuName應該在NavigationName – MekeniKine

+0

@MekeniKine:對,所以再次應用相同的邏輯:當你創建'NavigationName'元素,保持它作爲一個變量,所以你可以添加當你創建'MenuName'元素時。 –

+0

混淆了先生,你能告訴我怎麼做嗎? thnaks! – MekeniKine

3

要添加到喬恩長柄水杓答案,

您還可以使用

using System.Xml.Linq; 

遍歷列表,以便它是所有一個說法,

new XElement("NavigationSets", 
    menus.Select(menu => new XElement("MenuName")) 
)