C# 样式格式Openxml
我正在尝试用Openxml构建一个文档 当我将一个样式添加到styles.xml并尝试验证它时,会出现以下错误 元素具有意外的子元素“” 以下是styles.xml文件:C# 样式格式Openxml,c#,xml,openxml,openxml-sdk,C#,Xml,Openxml,Openxml Sdk,我正在尝试用Openxml构建一个文档 当我将一个样式添加到styles.xml并尝试验证它时,会出现以下错误 元素具有意外的子元素“” 以下是styles.xml文件: <?xml version="1.0" encoding="UTF-8"?> <w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> <w:style w:customStyle="true
<?xml version="1.0" encoding="UTF-8"?>
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:style w:customStyle="true" w:styleId="33" w:type="paragraph">
<w:name w:val="Heading 1"/>
<w:basedOn w:val="Normal"/>
<w:next w:val="Normal"/>
<w:rPr>
<w:color w:val="E32020" w:themeColor="light2"/>
<w:rFonts w:ascii="Calibri Light"/>
<w:sz w:val="32"/>
</w:rPr>
</w:style>
</w:styles>
有人能帮我理解我的风格有什么问题吗。这似乎是开放式XML验证程序的一个错误,您可以忽略它。如果查看,
w:rFonts
显然是w:rPr
的允许子元素。如果你用Word打开文档(正如Cindy暗示的那样),Word没有抱怨,你就没事了
Cindy还指出,您的样式定义存在一个问题,即您使用标题1
作为样式名称。由于内置样式的名称是标题1
(请注意小写字母“h”),这甚至可以在开放XML级别上使用(但您可能无法在Word中看到确切的样式名称,因为Word将使用“标题1”作为显示名,至少在您的显示语言为英语的情况下是如此)。但是,Word会更改您的w:styleId
值(在您的示例中为“33”)。规则是w:styleId
值是w:name
值的函数。例如,如果样式的w:name
值为“我的样式名”,则相应的w:styleId
值应为“MyStyleName”。至少这是Word在将文档保存到Word中后将使用的内容
对于内置样式,名称是本地化的,并不完全遵循该规则。例如,如果选择英语作为显示语言,则内置的“标题1”样式的w:name
值为“标题1”,而w:styleId
值为“标题1”(请注意大写字母“H”)。例如,如果您选择了德语或法语,w:styleId
值将分别为“berschrift1”或“Titre1”。德语w:styleId
值实际上必须是“Überschrift1”(注意umlaut),但Word只是从w:styleId
值中删除umlaut字符
在您的情况下,如果坚持使用“标题1”作为样式名称,Word将无法使用“标题1”(英文版本),并将在w:styleId
值中添加一个字符,以便能够区分这些样式
假设您使用英语作为显示语言,要修改内置的“标题1”样式,您将需要以下内容,在本例中,这只是Normal.dotx
模板中Word使用的标准“标题1”样式
请再次注意,
w:name
值是带有小写字母“h”的“标题1”。还要注意w:rFonts
元素,这表明验证器是错误的。尝试重命名。“标题1”是内置样式的名称-两个样式不能具有相同的名称,并且无法删除内置样式。或者将内置样式的定义更改为“标题1”所需的样式。我尝试重命名样式,但不起作用,希望尝试修改内置样式,您知道如何使用openxml更改内置样式吗?与您的其他问题类似,使用重命名的代码样式版本:能否用Word打开文档?没错,标题样式会因应用默认标题样式而更改。通过更改名称,我可以成功地添加它们。谢谢