使用带有两个列表的对象的 XDocument 创建 XML
Creating XML using XDocument with Object that has two Lists
我正在使用 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 个文档的地址放入第 1 个文档的地址块中。我需要它与 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));
}
}
感谢任何帮助。
在第一次迭代中,您创建了一个 Document 元素,填充了字段,并添加了 Address 元素。在第二次迭代中,添加第二个 Document 元素,填充字段,然后将 Address 元素添加到第一个 Document 元素(rootElement.Element("DOCUMENT") 获取第一个 "DOCUMENT" 元素) .
https://msdn.microsoft.com/en-us/library/system.xml.linq.xcontainer.element(v=vs.110).aspx
我会创建每个新的 "DOCUMENT",包括地址,然后将其添加到 DOCUMENTS。
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);
}
我正在使用 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 个文档的地址放入第 1 个文档的地址块中。我需要它与 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));
}
}
感谢任何帮助。
在第一次迭代中,您创建了一个 Document 元素,填充了字段,并添加了 Address 元素。在第二次迭代中,添加第二个 Document 元素,填充字段,然后将 Address 元素添加到第一个 Document 元素(rootElement.Element("DOCUMENT") 获取第一个 "DOCUMENT" 元素) .
https://msdn.microsoft.com/en-us/library/system.xml.linq.xcontainer.element(v=vs.110).aspx
我会创建每个新的 "DOCUMENT",包括地址,然后将其添加到 DOCUMENTS。
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);
}