我有一个XML文件:TableList.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-to-XML查询此文件,并且我想要的每个值都得到以下格式
The table - TableA - has columns - ColumnA1,ColumnA2,ColumnA3,ColumnA4.
The table - TableB - has columns - ColumnB1,ColumnB2,ColumnB3,ColumnB4.
并将其创建为单个文本文件 - TableDoc.txt
- 结束。
如何使用Linq-to-XML简化圆顶?
答案 0 :(得分: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 :(得分: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);
}
}
答案 2 :(得分: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
工作正常。