2

私は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 を使用してこれを簡潔にするにはどうすればよいでしょうか?

4

3 に答える 3

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

(明らかに、実際の簡潔さのために不要な空白をすべて削除してください。)

もちろん、それでも、それがどのように/なぜ機能するのかを理解するという課題が残ります。そして、より読みやすい方法でリファクタリングする可能性があります。

于 2012-10-22T17:00:48.170 に答える
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);
    }
}
于 2012-10-22T17:01:11.057 に答える
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うまく動作します。

于 2012-10-22T17:08:44.160 に答える