Завершен вопрос с вводом из предыдущего ответа.Это просто, чтобы показать вам, как получить желаемый результат, если кто-то ищет его в будущем.Это создано для открытия в Office Excel.Поэтому Linq To XML экспортируется в XML-файл, чтобы его можно было легко открыть в Excel.
Форматирование цели:
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
<ss:Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet">
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office" />
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel" />
<ss:Worksheet ss:Name="Sheet 1">
<ss:Table>
<ss:Row>
<ss:Cell>
<ss:Data ss:Type="String">name</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">sku</ss:Data>
</ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell>
<ss:Data ss:Type="String">Suunto Elementum Terra</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">SS014522000</ss:Data>
</ss:Cell>
</ss:Row>
</ss:Table>
</ss:Worksheet>
</ss:Workbook>
Код для созданиянужный XML.
// Linq to XML - Namespaces
XNamespace ns = "urn:schemas-microsoft-com:office:spreadsheet";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace x = "urn:schemas-microsoft-com:office:excel";
XNamespace x2 = "http://schemas.microsoft.com/office/excel/2003/xml";
XNamespace ss = "urn:schemas-microsoft-com:office:spreadsheet";
XNamespace o = "urn:schemas-microsoft-com:office:office";
XNamespace html = "http://www.w3.org/TR/REC-html40";
XNamespace c = "urn:schemas-microsoft-com:office:component:spreadsheet";
// Linq to XML - Document
XDocument doc = new XDocument(
new XDeclaration("1.0", "UTF-8", string.Empty),
new XProcessingInstruction("mso-application", "progid=\"Excel.Sheet\""),
new XElement(ns + "Workbook",
new XAttribute("xmlns", ns.NamespaceName),
new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName),
new XAttribute(XNamespace.Xmlns + "x", x.NamespaceName),
new XAttribute(XNamespace.Xmlns + "x2", x2.NamespaceName),
new XAttribute(XNamespace.Xmlns + "ss", ss.NamespaceName),
new XAttribute(XNamespace.Xmlns + "o", o.NamespaceName),
new XAttribute(XNamespace.Xmlns + "html", html.NamespaceName),
new XAttribute(XNamespace.Xmlns + "c", c.NamespaceName),
new XElement(o + "OfficeDocumentSettings",
new XAttribute("xmlns", o.NamespaceName)),
new XElement(x + "ExcelWorkbook",
new XAttribute("xmlns", x.NamespaceName)),
new XElement("Worksheet",
new XAttribute(ss + "Name", "Sheet 1"),
new XElement("Table", // 1st Table
new XElement("Row", // First Row
new XElement("Cell", // First Cell on First Row
new XElement("Data", new XAttribute(ss + "Type", "String"), "name") // Data in Cell A1
),
new XElement("Cell",
new XElement("Data", new XAttribute(ss + "Type", "String"), "age") // Data in Cell B1
)
)
)
)
)
);
// Loop through a collection. Each iteration is a new row
foreach (Product product in products)
{
// Linq to XML - Data
doc.Descendants("Row").First().AddAfterSelf(
new XElement("Row",
new XElement("Cell",
new XElement("Data", new XAttribute(ss + "Type", "String"), product.Name)), // Data in Cell A2
new XElement("Cell",
new XElement("Data", new XAttribute(ss + "Type", "String"), product.Age) // Data in Cell B2
)
)
);
}
// Namespace fix. Deletes any empty xmlns="" text in every node.
foreach (XElement e in doc.Root.DescendantsAndSelf())
{
if (e.Name.Namespace == string.Empty)
{
e.Name = ns + e.Name.LocalName;
}
}