C# Excel 2007:XML:因缺少ss:命名空间限定符而阻塞

C# Excel 2007:XML:因缺少ss:命名空间限定符而阻塞,c#,xml,excel,xml-namespaces,C#,Xml,Excel,Xml Namespaces,正在尝试使用C#和System.XML.Serialization创建Excel 2007 XML文件。Excel XML文件的根元素如下所示: <Workbook xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="urn:schemas-m

正在尝试使用C#和System.XML.Serialization创建Excel 2007 XML文件。Excel XML文件的根元素如下所示:

<Workbook xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="urn:schemas-microsoft-com:office:spreadsheet">
在生成的XML中,省略了“”(默认)命名空间,因为它与“ss”相同

“我的样式”对象大致如下: [XmlRoot(Namespace=“urn:schemas-microsoft-com:office:spreadsheet”)] 公共课风格 { [XmlAttribute] 公共字符串ID{get;set;}

    [XmlAttribute]
    public string Name { get; set; }

    [XmlElement]
    public string Font { get; set; }
}
当我实际生成我得到的XML时:

<ss:Style ID="s21">
          <ss:Font x:Family="Swiss" Bold="1"/>
</ss:Style>

我不认为这在技术上有什么问题。Excel不介意元素上的ss:qualifier,但它阻塞了,因为它不能定义Style的'ID'属性。它必须硬编码以查找文本字符串'ss:ID'

如果我从名称空间中省略“ss”,它会生成更干净的XML,但不会使我的错误消失。我也尝试过省略“ss”名称空间,然后将Style对象的名称空间设置为字面上的“ss”,但它会生成一些名为“d4p1”的临时名称空间,并造成真正的混乱

关于如何让Excel读取有效的XML有什么想法吗

为了获得额外的分数,我如何使XML文件的开头看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>

显然,第一部分附带了一个XML编写器,但是有没有任何非黑客的方法来获取第二行

谢谢,
除了编写XML文档之外,您还考虑了使用XML吗?除了帮助打开XML文档的操作之外,它还包含了相当多的文档,并且看起来它非常适合您的任务:

用于Microsoft Office的开放式XML SDK 2.0构建在 System.IO.Packaging API并提供 要创建的强类型零件类 操作打开的XML文档。SDK 还使用.NET框架 语言集成查询(LINQ) 提供强类型 对象访问XML内容 在开放XML的各个部分中 文件


<> P>而不是自己编写XML,您是否考虑使用?除了帮助打开XML文档的操作之外,它还包含相当多的文档,并且看起来它非常适合您的任务:

用于Microsoft Office的开放式XML SDK 2.0构建在 System.IO.Packaging API并提供 要创建的强类型零件类 操作打开的XML文档。SDK 还使用.NET框架 语言集成查询(LINQ) 提供强类型 对象访问XML内容 在开放XML的各个部分中 文件


我不太相信MS技术协同工作,也不太相信他们现在能够理解XML,但我还是会尝试一下。谢谢你的建议。这是可行的,但SDK的级别很低,不像我写的包那么方便。我不太相信MS技术协同工作,也不太相信他们的技术现在能够理解XML,但无论如何我都会尝试一下。谢谢你的建议。这很有效,但SDK的级别很低,没有我编写的包那么方便。
<ss:Style ID="s21">
          <ss:Font x:Family="Swiss" Bold="1"/>
</ss:Style>
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>