![](/img/trans.png)
[英]C# XML to LINQ multiple elements with same name, how to get them to save in same object
[英]C# LINQ with XML, cannot extract multiple fields with same name into object
嘗試使用LINQ XML將以下XML文件(可以更改)讀入對象為VAR。
<?xml version='1.0'?>
<config>
<report>
<name>Adjustment Report</name>
<extension>pdf</extension>
<filetype>adobe_pdf</Filetype>
<field name="total" type="currency" />
<field name="adjust" type="currency" />
<field name="monthly" type="currency" />
<output>
<format>Excel</format>
<AutoFormat>True</AutoFormat>
</output>
<reportstart>adjustment report</reportstart>
<reportend></reportend>
<linebegins>
<regex>(?<ssn>\d{3}-\d{2}-\d{4})</Regex>
</linebegins>
<regex>"(?<last>\s{0,1}[A-Z-'.]+\s{0,1}[A-Z-'.]+),(?<first>\s[A-Z-'.]+\s{0,1})(?<middle>[A-Z][.]|\s{0,1})"></Regex>
<regex>"(?<ssn>\d{3}-\d{2}-\d{4})"</Regex>
<regex>"(?<total>\$[,/d]+)(?<adjust>\$[,/d]+)(?<monthly>\$[,/d]+)"</Regex>
</report>
</config>
不起作用的是將多個元素讀入對象。 我只能看第一個。 顯然,保存字段的對象必須是數組嗎? 這是我到目前為止的代碼。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ElementDemo
{
class Program
{
static void Main(string[] args)
{
XElement xml = XElement.Load("C:\\TEMP\\test.xml");
var reports = from report in xml.Descendants("report")
where report.Element("name").Value.Contains("Adjustment Report")
select new
{
Name = report.Element("name").Value,
Extension = report.Element("extension").Value,
FileType = report.Element("filetype").Value,
// Fields : How is this done?
};
foreach(var obj in reports)
{
Console.WriteLine("Name: " + obj.Name );
};
Console.ReadLine();
}
}
}
提前致謝。
使用Elements
方法獲取所有field
元素,然后調用Select
將其變成對象。
例如:
var reports = from report in xml.Descendants("report")
where report.Element("name").Value.Contains("Adjustment Report")
select new {
Name = report.Element("name").Value,
Extension = report.Element("extension").Value,
FileType = report.Element("filetype").Value,
Fields = report.Elements("field")
.Select(f => new {
Name = f.Attribute("name").Value,
Type = f.Attribute("type").Value
}).ToArray()
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.