【问题标题】:Create XML using LINQ-to-XML API使用 LINQ-to-XML API 创建 XML
【发布时间】:2011-01-28 09:39:55
【问题描述】:

我想创建一个看起来像这样的 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>

请帮忙。

【问题讨论】:

    标签: .net xml linq linq-to-entities


    【解决方案1】:

    是的,它覆盖了第一条记录的属性,因为您告诉它 - 您没有使用刚刚创建的 Record 元素。你可以这样做:

    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 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多