Создание XML с использованием API LINQ-to-XML - PullRequest
0 голосов
/ 28 января 2011

Я хочу создать 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>

пожалуйста, помогите.

1 Ответ

5 голосов
/ 28 января 2011

Да, он перезаписывает атрибуты первой записи, потому что вы говорите об этом - вы не используете только что созданный элемент записи. Вы можете сделать это так:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...