我想创建一个XML,它看起来像
<Records FileUniqueId="1234567" Source="CCC">
<Record InfNumber="122354" AgencyNumber="017"></Record>
<Record InfNumber="122355" AgencyNumber="018"></Record>
<Record InfNumber="122356" AgencyNumber="018"></Record>
</Records>
XElement responseXML = new XElement("Records");
responseXML.SetAttributeValue(BusinessConstants.colFileUniqueID, _fileUniqueId);
responseXML.SetAttributeValue(BusinessConstants.colSourceName, _sourceName);
foreach (InfringementEntity ie in iLES.infringementEntities)
{
responseXML.Add(new XElement("Record"));
XElement record = responseXML.Element("Record");
record.SetAttributeValue(BusinessConstants.colInfringementNumber, ie.infringementNumber);
record.SetAttributeValue(BusinessConstants.colIssueAgency, ie.issueAgency);
}我使用上面的代码来生成XML,但问题是,当我为记录设置属性时,它每次都会覆盖第一条记录的属性。
所以我得到的XML是:
<Records FileUniqueId="1234567" Source="CCC">
<Record InfNumber="122356" AgencyNumber="018"></Record>
<Record/>
<Record/>
</Records>请帮帮忙。
发布于 2011-01-28 17:43:16
是的,它覆盖了第一条记录的属性,因为你告诉它-你没有使用你刚刚创建的记录元素。你可以这样做:
foreach (InfringementEntity ie in iLES.infringementEntities)
{
XElement newRecord = new XElement("Record");
newRecord.SetAttributeValue(BusinessConstants.colInfringementNumber,
ie.infringementNumber);
newRecord.SetAttributeValue(BusinessConstants.colIssueAgency,
responseXML.Add(newRecord);
}..。但是还有更多惯用的方法,例如:
XElement responseXML = new XElement("Records",
iLes.infringementEntities.Select(ie => new XElement("Record",
new XAttribute(BusinessConstants.colInfringementNumber,
ie.infringementNumber),
new XAttribute(BusinessConstants.colIssueAgency, ie.issueAgency))));这将替换您的整个代码,包括foreach语句。
https://stackoverflow.com/questions/4826713
复制相似问题