繁体   English   中英

Excel 2007:XML:对缺少的ss:名称空间限定符感到cho

[英]Excel 2007: XML: choking on missing ss: namespace qualifier

尝试使用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">

默认名称空间中的许多元素都具有用“ ss”限定的属性,这是不必要的,因为“ ss”和默认名称空间都为“ urn:schemas-microsoft-com:office:spreadsheet”。

例如,Style元素显示为:

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

创建XmlSerializerNamespaces时,我添加了Excel要的所有命名空间:

var ns = new XmlSerializerNamespaces();
ns.Add("", "urn:schemas-microsoft-com:office:spreadsheet");
ns.Add("o", "urn:schemas-microsoft-com:office:office");
ns.Add("x", "urn:schemas-microsoft-com:office:excel");
ns.Add("ss", "urn:schemas-microsoft-com:office:spreadsheet");
ns.Add("html", "http://www.w3.org/TR/REC-html40");

在生成的XML中,省略了“”(默认)名称空间,因为它与“ ss”相同。

我的样式对象类似于:[XmlRoot(Namespace =“ urn:schemas-microsoft-com:office:spreadsheet”)]公共类样式{[XmlAttribute]公共字符串ID {get; 组; }

    [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:限定符,但它会阻塞,因为它不能使用Style的'ID'属性。 必须使用硬编码查找文字字符串“ ss:ID”吗?

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

关于如何使Excel读取有效XML的任何想法?

对于加分标记,我该如何使XML文件的开头看起来像这样:

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

显然,第一部分是XML编写器附带的,但是是否有任何非骇客的方法来获得第二行?

谢谢〜S

您是否考虑使用针对Microsoft OfficeOpen XML SDK 2.0,而不是自己编写xml? 除了帮助处理Open XML文档之外,它还包含许多文档,并且看起来非常适合您的任务:

适用于Microsoft Office的Open XML SDK 2.0建立在System.IO.Packaging API的基础上,并提供了用于操作Open XML文档的强类型零件类。 该SDK还使用.NET Framework语言集成查询(LINQ)技术来提供对Open XML文档内部的XML内容的强类型对象访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM