样式格式 Openxml

Styles Format Openxml

我正在尝试使用 Openxml 构建文档,

当我向 styles.xml 添加样式并尝试验证它时,出现以下错误

该元素有意外的子元素“http://schemas.openxmlformats.org/wordprocessingml/2006/main:rFonts

这里是 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>

谁能帮助我理解我的风格有什么问题。

这似乎是 Open XML 验证器的错误,您可以忽略它。如果您查看 specification of the w:rPr elementw:rFonts 显然是 w:rPr 的允许子元素。如果您在 Word 中打开该文档(如 Cindy 所暗示的那样)并且 Word 没有报错,则您没有问题。

正如 Cindy 还指出的那样,您的样式定义存在问题,即您使用 Heading 1 作为样式名称。由于内置样式的名称是 heading 1(注意小写 "h"),这甚至可以在 Open XML 级别上工作(但您可能不会在 Word 中看到您的确切样式名称,因为至少如果您的显示语言是英语,Word 将使用 "Heading 1" 作为显示名称)。但是,Word 会更改您的 w:styleId 值(在您的示例中为“33”)。规则是 w:styleId 值是 w:name 值的函数。例如,如果您的样式的 w:name 值为 "My Style Name",则对应的 w:styleId 值应为 "MyStyleName"。至少这是您在 Word 中保存文档后 Word 将使用的内容。

对于内置样式,名称已本地化,并不完全遵循该规则。例如,内置 "Heading 1" 样式的 w:name 值为 "heading 1",w:styleId 值为 "Heading1"(注意大写 "H")如果您已选择英语作为显示语言。例如,如果您选择德语或法语,w:styleId 值将分别为 "berschrift1" 或 "Titre1"。德语 w:styleId 值实际上必须是“Überschrift1”(注意变音符号),但 Word 只是从 w:styleId 值中删除变音字符。

在您的情况下,如果您坚持使用 "Heading 1" 作为样式名称,Word 将无法使用 "Heading1"(在英文版中),并且会在 w:styleId 后附加一个字符能够区分这些样式的值。

假设您使用英语作为显示语言,要修改内置 "Heading 1" 样式,您将需要类似以下内容,在本例中就是标准 "Heading 1" 样式,如下所示Word 在 Normal.dotx 模板中使用。

  <w:style w:type="paragraph" w:styleId="Heading1">
    <w:name w:val="heading 1"/>
    <w:basedOn w:val="Normal"/>
    <w:next w:val="Normal"/>
    <w:link w:val="Heading1Char"/>
    <w:uiPriority w:val="9"/>
    <w:qFormat/>
    <w:rsid w:val="008A559F"/>
    <w:pPr>
      <w:keepNext/>
      <w:keepLines/>
      <w:spacing w:before="240" w:after="0"/>
      <w:outlineLvl w:val="0"/>
    </w:pPr>
    <w:rPr>
      <w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/>
      <w:color w:val="2F5496" w:themeColor="accent1" w:themeShade="BF"/>
      <w:sz w:val="32"/>
      <w:szCs w:val="32"/>
    </w:rPr>
  </w:style>

再次注意 w:name 值是 "heading 1" 小写 "h"。还要注意 w:rFonts 元素,表明验证器是错误的。