I need to replicate this XML in C# and Linq to XML. I dont want any dependencies to other libraries other than the normal .NET ones. The XML is shown below.
Problem: I can’t figure out how to print these two lines:
<?mso-application progid="Excel.Sheet"?>
<Data ss:Type="String">name</Data>
Full XML document:
<?xml version="1.0" encoding="utf-8" ?>
<?mso-application progid="Excel.Sheet"?>
<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"></OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"></ExcelWorkbook>
<Worksheet ss:Name="Sheet 1">
<Table>
<Row>
<Cell>
<Data ss:Type="String">name</Data>
</Cell>
<Cell>
<Data ss:Type="String">status</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type="String">Niike2</Data>
</Cell>
<Cell>
<Data ss:Type="String">Enabled</Data>
</Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
Code:
XNamespace ns = "urn:schemas-microsoft-com:office:spreadsheet";
XDocument doc = new XDocument(
new XDeclaration("1.0", "UTF-8", string.Empty),
new XComment(String.Format("Exported: {0}", DateTime.Now)),
new XElement(ns + "Workbook",
new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
new XAttribute(XNamespace.Xmlns + "x", "urn:schemas-microsoft-com:office:excel"),
new XAttribute(XNamespace.Xmlns + "x2", "http://schemas.microsoft.com/office/excel/2003/xml"),
new XAttribute(XNamespace.Xmlns + "o", "urn:schemas-microsoft-com:office:office"),
new XAttribute(XNamespace.Xmlns + "html", "http://www.w3.org/TR/REC-html40"),
new XAttribute(XNamespace.Xmlns + "c", "urn:schemas-microsoft-com:office:component:spreadsheet"),
new XElement(ns + "Worksheet",
new XElement(ns + "Table",
new XElement(ns + "Row",
new XElement(ns + "Cell", "name")
)
)
)
);
The second line with <? …. ?> is called a Processing Instruction. The rest is just manipulating namespaces.