我正在解析.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
具体来说:“如果给定部分省略了这个元素,那么该部分将使用在文档范围级别定义的脚注属性。”
答案 0 :(得分:0)
Word会做Word所做的事情......
[MS-OE376]和[MS-OI29500]都记录了一些关于脚注的内容,但不是你的发现。
答案 1 :(得分:0)
根据我的经验,该标准有助于理解Word中的内容,但将标准提供给Word可能会产生意想不到的结果。在这种情况下,我通常使用Word进行小的增量更改,并在结果上运行差异。
在这种特殊情况下,将脚注属性更改应用于Whole document
不仅会修改全局设置,还会修改每个部分属性。保证一旦应用于记录每个部分将具有明确的价值。
更有趣的是,应用1,2,3 ...
编号会导致在单个部分或同时删除w:numFmt
。
看起来我们在文档中看不到隐藏的默认值。就我而言,w:numFnt
为decimal
,而w:pos
则为pageBottom
。我想知道它是否是特定语言和/或语言环境。
我怀疑其他方向也有错误,设置为lowerRoman
且默认设置为decimal
的默认情况下的docx会在OpenOffice中呈现错误 - 一切都将lowerRoman