Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 样式格式Openxml_C#_Xml_Openxml_Openxml Sdk - Fatal编程技术网

C# 样式格式Openxml

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

我正在尝试用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" 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打开文档?没错,标题样式会因应用默认标题样式而更改。通过更改名称,我可以成功地添加它们。谢谢