2012-12-17 41 views
0

我的問題是商店名稱應該是公司名稱的子元素,但是發生的是它們在行中是一樣的我該如何解決這個問題?在C#中使用linq to xml創建xml子元素的正確方式

下面是示例輸出:

<?xml version="1.0" encoding="utf-8"?> 
<Records> 
    <CompanyName>Company 1</CompanyName> 
    <StoreName>Store 2</StoreName> 
    <StoreName>Store 3</StoreName> 
    <StoreName>Store 5</StoreName> 
    <CompanyName>Company 2</CompanyName> 
    <StoreName>Store 1</StoreName> 
    <StoreName>Store 4</StoreName> 
</Records> 

這裏是我的代碼:

qlCommand cmd = new SqlCommand("select company_name, company_id from company", cn); 
      //SqlCommand cmd = new SqlCommand("SELECT dbo.company.company_name, dbo.store.store_name, dbo.store.company_id FROM dbo.company INNER JOIN dbo.store ON dbo.company.company_id = dbo.store.company_id", cn); 
      SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable(); 
      adapter.Fill(dt); 

      SqlCommand cmd2 = new SqlCommand("select store_name, company_id from store", cn); 
      SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2); 
      DataTable dt2 = new DataTable(); 
      adapter2.Fill(dt2); 

      dataGridView1.DataSource = dt; 

      XElement xml = new XElement("Records"); 
      foreach (DataRow row in dt.Rows) 
      { 
       xml.Add(new XElement("CompanyName", row["company_name"].ToString())); 
       foreach (DataRow row1 in dt2.Rows) 
       { 
        if(row["company_id"].ToString() == row1["company_id"].ToString()) 
        { 
         xml.Add(new XElement("StoreName", row1["store_name"].ToString())); 
        } 
       } 
      } 

      xml.Save("C:\\Users\\PHWS13\\Desktop\\test.xml"); 

回答

1

的問題是,您要添加的元素xml它總是在同一水平(即你總是將元素添加爲「Records」元素的子元素)。

試試這個:

XElement xml = new XElement("Records"); 
foreach (DataRow row in dt.Rows) 
{ 
    var companyName = new XElement("CompanyName", row["company_name"].ToString()) 
    xml.Add(companyName); 
    foreach (DataRow row1 in dt2.Rows) 
    { 
     if(row["company_id"].ToString() == row1["company_id"].ToString()) 
     { 
      companyName.Add(new XElement("StoreName", row1["store_name"].ToString())); 
     } 
    } 
} 
+0

噢。它完美的作品謝謝! – GrayFullBuster