我正在尝试像这样为 Excel 构建 XML:
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>OOO XXX</Author>
<LastAuthor>Nickolay Efimov</LastAuthor>
<Created>2018-03-20T06:19:09Z</Created>
</DocumentProperties>
</Workbook>
我的 C# 代码:
XElement Workbook = new XElement(xmlns + "Workbook",
new XAttribute("xmlns", "urn:schemas-microsoft-com:office:spreadsheet"),
new XAttribute(XNamespace.Xmlns + "o", "urn:schemas-microsoft-com:office:office"),
new XAttribute(XNamespace.Xmlns + "x", "urn:schemas-microsoft-com:office:excel"),
new XAttribute(XNamespace.Xmlns + "ss", "urn:schemas-microsoft-com:office:spreadsheet"),
new XAttribute(XNamespace.Xmlns + "html", "http://www.w3.org/TR/REC-html40"),
new XElement(xmlnsO + "DocumentProperties",
new XAttribute("xmlns", "urn:schemas-microsoft-com:office:office"),
new XElement("Author", "OOO XXX"),
new XElement("LastAuthor", "Nickolay Efimov"),
new XElement("Created", "2018-03-20T06:19:09Z")));
输出 XML 如下所示:
<ss:Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author xmlns="">OOO XXX</Author>
<LastAuthor xmlns="">Nickolay Efimov</LastAuthor>
<Created xmlns="">2018-03-20T06:19:09Z</Created>
</DocumentProperties>
</ss:Workbook>
我不明白为什么ss出现在Workbook中以及xmlns=""来自DocumentProperties子元素中的位置
type 属性
xmlns
或xmlns:prefix
具有特殊含义:它指定了一个命名空间。它不需要单独设置为XAttribute
。您需要创建类型变量
XNamespace
并将它们添加到元素名称中。这段代码中没有直接涉及的命名空间被注释掉。
这将给出这样的xml:
是否存在未实际使用的命名空间不应影响验证。
如果 xml 中有其他命名空间的元素,那么它们的定义将被自动添加。
如果由于某种原因最终的 xml 仍然需要包含其他节点没有的命名空间的定义,那么可以像您一样添加它们。
这将给出这样的xml:
非常接近预期,尽管存在差异。但在验证方面,这个xml相当于前一个和你问题中的那个。
命名空间的定义顺序,就像属性的顺序一样,在 xml 中并不重要。
命名空间前缀无关紧要。
命名空间可以在任何级别定义,可以直接在元素上定义,也可以在层次结构更高的任何祖先上定义。element 中没有定义
DocumentProperties
,就在上面。