<List> 到 XML 与 Linq c#
<List> to XML with Linq c#
我已经将一个糟糕的文档解析成一个列表,但我在使用 Linq 格式化它时遇到问题,而且似乎无法完全正确。
我的代码如下所示:
var xEle = new XElement("WorkOrder",
from item in items
select new XElement(item.SECTION,
new XElement(item.DATANAME, item.DATAVALUE)));
产生这样的东西:
<WorkOrder>
<JOBDETAILS>
<JOBNUMBER>12345</JOBNUMBER>
</JOBDETAILS>
<JOBDETAILS>
<ACTIVITYNO>/01</ACTIVITYNO>
</JOBDETAILS>
<JOBDETAILS>
<JOBCCD>15/06/2015
</JOBCCD>
</JOBDETAILS>
<JOBDETAILS>
<REQUIRED>15/06/2016
</REQUIRED>
</JOBDETAILS>
<COMPANYDETAILS>
<COMPANY>Adventure Works
</COMPANY>
</COMPANYDETAILS>
<COMPANYDETAILS>
<STREET>LTD
</STREET>
</COMPANYDETAILS>
<COMPANYDETAILS>
<LOCALITY>123 Street
</LOCALITY>
</COMPANYDETAILS>
<COMPANYDETAILS>
<TOWN>Local Town
</TOWN>
</COMPANYDETAILS>
<COMPANYDETAILS>
<COUNTY>County Name
</COUNTY>
</COMPANYDETAILS>
<COMPANYDETAILS>
<POSTCODE>ABC 1234
</POSTCODE>
<COMMENTS>
<COMMENT>this is a comment</COMMENT>
</COMMENTS>
</WorkOrder>
我试图让它按我的 item.SECTION 分组(在示例输出中这将是 JOBDETAILS & COMPANYDETAILS),我想生成这样的东西:
<WorkOrder>
<JOBDETAILS>
<JOBNUMBER>12345</JOBNUNMBER>
<ACTIVITYNO>/01</ACTIVITYNO>
<JOBCCD>15/06/2015</JOBCCD>
<REQUIRED>15/06/2016</REQUIRED>
</JOBDETAILS>
<COMPANYDETAILS>
<COMPANY>Adventure Works</COMPANY>
<STREET>LTD</STREET>
<LOCALITY>123</LOCALITY>
</COMPANYDETAILS>
<COMMENTS>
<COMMENT>THIS IS A COMMENT</COMMENT>
</COMMENTS>
</WorkOrder>
我的列表是动态的,每次都不包含一组特定的字段,因此我没有对输出进行硬编码。
我不认为我在一百万英里之外,希望能向正确的方向踢球。
您需要添加一个 groupby 以按部分对结果进行分组。
var xEle =
new XElement("WorkOrder",
from item in items
group item by item.SECTION into g
select new XElement(g.Key,
g.Select(i => new XElement(i.DATANAME, i.DATAVALUE))));
请注意,您还需要两次选择,一次构建元素列表,另一次将它们组合在一起。 (请注意,我使用函数语法,你也可以说 from i in g select
的变体)
我已经将一个糟糕的文档解析成一个列表,但我在使用 Linq 格式化它时遇到问题,而且似乎无法完全正确。
我的代码如下所示:
var xEle = new XElement("WorkOrder",
from item in items
select new XElement(item.SECTION,
new XElement(item.DATANAME, item.DATAVALUE)));
产生这样的东西:
<WorkOrder>
<JOBDETAILS>
<JOBNUMBER>12345</JOBNUMBER>
</JOBDETAILS>
<JOBDETAILS>
<ACTIVITYNO>/01</ACTIVITYNO>
</JOBDETAILS>
<JOBDETAILS>
<JOBCCD>15/06/2015
</JOBCCD>
</JOBDETAILS>
<JOBDETAILS>
<REQUIRED>15/06/2016
</REQUIRED>
</JOBDETAILS>
<COMPANYDETAILS>
<COMPANY>Adventure Works
</COMPANY>
</COMPANYDETAILS>
<COMPANYDETAILS>
<STREET>LTD
</STREET>
</COMPANYDETAILS>
<COMPANYDETAILS>
<LOCALITY>123 Street
</LOCALITY>
</COMPANYDETAILS>
<COMPANYDETAILS>
<TOWN>Local Town
</TOWN>
</COMPANYDETAILS>
<COMPANYDETAILS>
<COUNTY>County Name
</COUNTY>
</COMPANYDETAILS>
<COMPANYDETAILS>
<POSTCODE>ABC 1234
</POSTCODE>
<COMMENTS>
<COMMENT>this is a comment</COMMENT>
</COMMENTS>
</WorkOrder>
我试图让它按我的 item.SECTION 分组(在示例输出中这将是 JOBDETAILS & COMPANYDETAILS),我想生成这样的东西:
<WorkOrder>
<JOBDETAILS>
<JOBNUMBER>12345</JOBNUNMBER>
<ACTIVITYNO>/01</ACTIVITYNO>
<JOBCCD>15/06/2015</JOBCCD>
<REQUIRED>15/06/2016</REQUIRED>
</JOBDETAILS>
<COMPANYDETAILS>
<COMPANY>Adventure Works</COMPANY>
<STREET>LTD</STREET>
<LOCALITY>123</LOCALITY>
</COMPANYDETAILS>
<COMMENTS>
<COMMENT>THIS IS A COMMENT</COMMENT>
</COMMENTS>
</WorkOrder>
我的列表是动态的,每次都不包含一组特定的字段,因此我没有对输出进行硬编码。
我不认为我在一百万英里之外,希望能向正确的方向踢球。
您需要添加一个 groupby 以按部分对结果进行分组。
var xEle =
new XElement("WorkOrder",
from item in items
group item by item.SECTION into g
select new XElement(g.Key,
g.Select(i => new XElement(i.DATANAME, i.DATAVALUE))));
请注意,您还需要两次选择,一次构建元素列表,另一次将它们组合在一起。 (请注意,我使用函数语法,你也可以说 from i in g select
的变体)