样式格式 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 element,w: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
元素,表明验证器是错误的。
我正在尝试使用 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 element,w: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
元素,表明验证器是错误的。