【问题标题】:Creating XML using XDocument with Object that has two Lists使用具有两个列表的对象的 XDocument 创建 XML
【发布时间】:2018-07-03 20:04:34
【问题描述】:

我正在使用 C# 中的 XDocument 创建 XML 文档。我正在遍历包含另一个集合的对象集合。这是我正在尝试创建的示例。

<Documents>
  <Document>
     <Field_1></Field_1>
     <Field_2></Field_2>
     <Field_3></Field_3>
     <Field_4></Field_4>
     <Address>
        <Item1></Item1>
        <Item2></Item2>
     </Address>
  </Document>
</Documents>

现在使用下面的代码,我可以在主对象上使用我的 foreach 循环添加所有文档及其字段,但我无法使用第一个 foreach 内的第二个 foreach 循环为每个文档添加关联的地址环形。我似乎遇到的主要问题是当我遇到一个文档时,比如我的集合中有 5 个文档,第二个 foreach 循环将第 5 个文档的地址放入第一个文档地址块中。我需要它与 5 号文件而不是 1 号文件一起使用。

 XDocument xmlDoc = XDocument.Load(Path.Combine(@"C:\XML_Template\", "XMLTemplate.xml"));
 XElement rootElement = xmlDoc.Element("DOCUMENTS");

        foreach (var pdf in PDFDocInfo) {
            rootElement.Add(
                new XElement("DOCUMENT",
                    new XElement("Field_1", pdf.F1),
                    new XElement("Field_2", pdf.F2),
                    new XElement("Field_3", pdf.F3),
                    new XElement("Field_4", pdf.F4),
                    ));
            foreach (var address in pdf.Address) {
                rootElement.Element("DOCUMENT").Add(
                    new XElement("Address",
                        new XElement("Item1", address.I1),
                        new XElement("Item2", address.I2));
                 }
             }

感谢任何帮助。

【问题讨论】:

    标签: c# xml linq-to-xml xelement


    【解决方案1】:

    在第一次迭代中,您创建一个 Document 元素、填充字段并添加 Address 元素。在第二次迭代中,添加第二个 Document 元素,填充字段,然后将 Address 元素添加到 FIRST Document 元素(rootElement.Element("DOCUMENT") 获取第一个 "DOCUMENT" 元素)。

    https://msdn.microsoft.com/en-us/library/system.xml.linq.xcontainer.element(v=vs.110).aspx

    我会改为创建每个新的“文档”,包括地址,然后将其添加到文档中。

    foreach (var pdf in PDFDocInfo) {
        // create a "Document" element
        newDoc = new XElement("DOCUMENT",
            new XElement("Field_1", pdf.F1),
            new XElement("Field_2", pdf.F2),
            new XElement("Field_3", pdf.F3),
            new XElement("Field_4", pdf.F4),
        );
        // add any Address elements to newDoc
        foreach (var address in pdf.Address) {
            newDoc.Add(
                new XElement("Address",
                    new XElement("Item1", address.I1),
                    new XElement("Item2", address.I2));
            }
        }
        // add newDoc to Documents
        rootElement.Add(newDoc);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2016-08-31
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多