我使用以下代码使用XML Powertools 2.2中的NormalizeXml函数规范化我的docx文档:
SimplifyMarkupSettings settings = new SimplifyMarkupSettings{
NormalizeXml = true,
};
我的目标是搜索和替换变量,但变量并不总是在同一个“运行属性”中,因此不会被替换。我也不想在Office中禁用校对。
运行我的程序后,当我尝试打开它时,docx文件已损坏并抱怨样式(并且NormalizeXml函数无效或完成):
根据架构,XML数据无效。 部分:/word/styles.xml,Line 1,第0列
我使用的是OpenXml 2.0,因为OpenXml 2.5需要.Net 4.5
我也在使用Office 2013。
当我使用OpenXml 2.0 Productivity Tool时,它会收到如下错误:
错误节点类型:样式 错误部分:/ word / styles / xml 错误节点路径:/ w:styles 1 描述:Ignorable属性无效 - 值'w14 w15'包含未定义的无效前缀。
这是我打开styles.xml时看到的内容:
<?xml version="1.0" encoding="utf-8"?><w:styles mc:Ignorable="w14 w15" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
我希望在Office 2007/2010/2013之间保持文档兼容。
在这个阶段,我正在考虑搜索这个“mc:Ignorable =”w14 w15“属性并进行空替换,但必须有更好的方法来执行此操作。
感谢您的任何建议。
答案 0 :(得分:0)
我的临时解决方案是确保需要替换的文档中的变量(以及用于检测变量的任何字符,例如:#name#)与字体完全相同,因此“运行属性”不要分手了。
我也在使用EditIx来确保变量在一个“运行属性”中,但这并不理想,因为我希望用户以后添加自己的变量。
答案 1 :(得分:0)
查看此帖子Programmatically save OpenXml document as previous version (Word 2007)
您必须修改打开的xml电动工具代码。
这对我有用。
希望这有帮助。