OOXML / *。docx脚注差异

时间:2014-10-23 20:00:11

标签: xml openxml docx

我正在解析.NET环境之外的* .docx文件中的内容,并遇到了XML MS Word生成和OOXML规范之间的差异。我希望有人能解释发生了什么。

我有一个包含三个文档部分的* .docx文件。第一个脚注属性元素如下:

<w:footnotePr>
  <w:numFmt w:val="upperRoman"/>
</w:footnotePr>

第二部分有这个(编号从本节开始):

<w:footnotePr>
  <w:numFmt w:val="upperRoman"/>
  <w:numRestart w:val="eachSect"/>
</w:footnotePr>

第三部分和最后一部分在最后的“secPr”中没有“footnotePr”元素,即section属性元素,它是body元素的子元素,应该用于控制最后一部分。根据OOXML规范,在该节没有“footnotePr”的情况下,settings.xml中的全局设置应该控制笔记的外观。文档设置文件中的脚注属性元素是:

<w:footnotePr>
  <w:numFmt w:val="upperRoman"/>
  <w:footnote w:id="-1"/>
  <w:footnote w:id="0"/>
</w:footnotePr>

根据规范的逻辑,似乎最终的音符应该用罗马数字编号,就像上一节中的脚注一样。在MS Word的每个副本中,我打开文档,但Word在最后一节显示带有十进制编号的注释。 LibreOffice用罗马数字显示它们,就像我期望的那样。

熟悉OOXML的人是否知道为什么会这样?

作为参考,可以在此处找到“footnotePr”元素的MSDN描述和相应的文档:http://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.footnoteproperties%28v=office.14%29.aspx

具体来说:“如果给定部分省略了这个元素,那么该部分将使用在文档范围级别定义的脚注属性。”

2 个答案:

答案 0 :(得分:0)

Word会做Word所做的事情......

[MS-OE376]和[MS-OI29500]都记录了一些关于脚注的内容,但不是你的发现。

答案 1 :(得分:0)

根据我的经验,该标准有助于理解Word中的内容,但将标准提供给Word可能会产生意想不到的结果。在这种情况下,我通常使用Word进行小的增量更改,并在结果上运行差异。

在这种特殊情况下,将脚注属性更改应用于Whole document不仅会修改全局设置,还会修改每个部分属性。保证一旦应用于记录每个部分将具有明确的价值。

更有趣的是,应用1,2,3 ...编号会导致在单个部分或同时删除w:numFmt

看起来我们在文档中看不到隐藏的默认值。就我而言,w:numFntdecimal,而w:pos则为pageBottom。我想知道它是否是特定语言和/或语言环境。

我怀疑其他方向也有错误,设置为lowerRoman且默认设置为decimal的默认情况下的docx会在OpenOffice中呈现错误 - 一切都将lowerRoman