2012-10-22 148 views
2

我有一個XML文件:TableList.xml查詢XML文件,並創建一個文本文件

<TableList> 
<Table> 
<TableName>TableA</TableName> 
<Columns>ColumnA1,ColumnA2,ColumnA3,ColumnA4</Columns> 
</Table> 
<Table> 
<TableName>TableB</TableName> 
<Columns>ColumnB1,ColumnB2,ColumnB3,ColumnB4</Columns> 
</Table> 
</TableList> 

我想查詢使用LINQ到XML和每個值的我想要得到下面這個文件格式

The table - TableA - has columns - ColumnA1,ColumnA2,ColumnA3,ColumnA4. 

The table - TableB - has columns - ColumnB1,ColumnB2,ColumnB3,ColumnB4. 

並將其創建爲單個文本文件 - TableDoc.txt - 最後。

這怎麼可以用簡潔的圓頂來使用Linq-to-XML?

回答

5

這怎麼可以用簡潔的圓頂來使用Linq-to-XML?

我會將此作爲一個簡潔的挑戰......

File.WriteAllLines("TableDoc.txt", XDocument.Load("TableList.xml") 
     .Descendants("Table") 
     .Select(t => string.Format("The table - {0} - has columns {1}.", 
            t.Element("TableName").Value, 
            t.Element("Columns").Value))); 

(顯然,刪除所有不必要的空白爲真正簡潔。)

這仍然留下您的挑戰弄清楚它是如何/爲什麼會起作用的 - 當然也可能以更可讀的方式重構它。

+1

對於legand +1和 – Anirudha

+0

+1也是。 –

1
using (TextWriter writer = File.CreateText("TableDoc.txt")) 
{ 
    XDocument doc=XDocument.Load("yourXML");//load document 
    foreach(var elm in doc.Descendants("Table"))//takes all table elements 
    { 
    string s="The table-"+elm.Element("TableName").Value+"- has coloumns -"+elm.Element("Columns").Value; 
     writer.WriteLine(s); 
    } 
} 
1

可能我建議稍微更可讀的查詢表達式版本(主觀):

var columnsPerTable = from table in XElement.Load("TableList.xml").Elements("Table") 
         let name = table.Element("TableName") 
         let columns = table.Element("Columns") 
         select string.Format("The table - {0} - has columns - {1}.", 
              name.Value, columns.Value); 
File.WriteAllLines("TableDoc.txt", columnsPerTable); 

沒有必要使用一個XDocument,當然。 XElement工作得很好。