我正在尝试使用类中的数据生成XML文件,该类具有名称和与名称关联的多个地址。我迷路了@在XElement中添加了多个地址。 有人能帮帮我吗。 提前致谢 BB
我的课程:
public class Subject
{
public ClueName name { get; set; }
public List driverAddress { get; set;}
}
public class DriverAddress
{
public string house { get; set; }
public string street1 { get; set; }
public string city { get; set; }
public string state { get; set; }
public string zip4 { get; set; }
}
private string BuildRequestXML(List <Subject> input)
{
string subjectId = "S1" ;
XElement req = new XElement("order",
new XElement("order_dataset",
new XElement("subjects",
from i in input
select
new XElement("subject", new XAttribute("id", subjectId),
new XElement("name",
new XElement("first",i.name.first),
new XElement("middle", i.name.middle ),
new XElement("last", i.name.last)
)
)
),
new XElement("addresses",
input.Select(c => {c.driverAddress.Select (d =>
new XElement("address",
new XElement("street1",d.street1),
new XElement("city",d.city),
new XElement("state",d.state),
new XElement("postalcode",d.postalcode)
)).ToList ();
}).ToList()
)
)
);
}
答案 0 :(得分:2)
我认为问题出在input.Select(c => {c.driverAddress.Select (d =>
部分。
你已经通过输入作为i进行迭代,所以可以按照
的顺序进行from d in i.driverAddress
select new XElement("address",
new XElement("street1", d.Street1),
new XElement("street2", d.Street2),
等...
更新:由于不应将驱动程序地址作为主题的子项输出,请尝试以下操作:
var addresses = new List<DriverAddress>();
input.ForEach(delegate(Subject s) { s.driverAddress.ForEach(d => addresses.Add(d)); });
string subjectId = "S1";
XElement req = new XElement("order",
new XElement("order_dataset",
new XElement("subjects",
from i in input
select
new XElement("subject", new XAttribute("id", subjectId),
new XElement("name",
new XElement("first", i.name.first),
new XElement("middle", i.name.middle),
new XElement("last", i.name.last)
)
)
),
new XElement("addresses",
from d in addresses
select new XElement("address",
new XElement("street1", d.street1),
new XElement("city", d.city),
new XElement("state", d.state),
new XElement("postalcode", d.postalcode)
)
)
)
);