繁体   English   中英

查询XML文件并创建文本文件

[英]Querying a XML FIle and creating a text file

我有一个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简洁地成为圆顶?

如何使用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)));

(显然,除去真正的简洁所有不必要的空格。)

当然,这仍然给您带来挑战,弄清楚它的工作原理/原因-并可能以一种更具可读性的方式对其进行重构。

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

我可以建议(主观地?)可读性更高的查询表达式版本:

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可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM