我使用XMLPowerols 2.2中的NormalizeXml函数对docx文档进行规范化,代码如下:
SimplifyMarkupSettings settings = new SimplifyMarkupSettings{
NormalizeXml = true,
};
我的目标是搜索和替换变量,但变量并不总是在同一个“运行属性”中,因此不会被替换。我也不想禁用Office中的校对功能。
运行我的程序后,docx文件已损坏,在我尝试打开它时会抱怨样式(NormalizeXml函数无法工作或完成):
根据架构,XML数据无效。部分:/word/样式。xml,第1行,第0列
因为OpenXml 2.5需要,所以我使用OpenXml 2.0。净4.5
我也在使用Office 2013。
当我使用OpenXml 2.0生产力工具时,它会出现如下错误:
错误节点类型:Styles错误部分:/word/Styles/xml错误节点路径:/w:styles1说明:可忽略属性无效-值“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”属性,并执行一个空替换,但必须有更好的方法来实现这一点。
谢谢你的建议。
显然,根元素中多余的命名空间声明会被NormalizeXml=true
删除,但mc: Ignute
属性中提到的相关前缀却没有。
我使用它递归地检查和修复文档中的所有OpenXmlParts:
private static void FixIgnorableAttributes(OpenXmlPartContainer container)
{
container.Parts.Select(idPartPair => idPartPair.OpenXmlPart).ToList().ForEach(part =>
{
var ignorableAttribute = part.RootElement?.MCAttributes?.Ignorable;
if (ignorableAttribute != null && ignorableAttribute.HasValue)
{
var root = part.GetXDocument().Root;
ignorableAttribute.Value =
string.Join(" ", ignorableAttribute.Value.Split(" ", StringSplitOptions.RemoveEmptyEntries).
Where(prefix => root.GetNamespaceOfPrefix(prefix) != null));
}
// Recursively fix descendant parts
FixIgnorableAttributes(container: part);
});
}
用法:
using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(pathOrStream, true))
{
MarkupSimplifier.SimplifyMarkup(wordDocument, new SimplifyMarkupSettings { NormalizeXml = true });
// Fix ignorables attributes
FixIgnorableAttributes(wordDocument);
}
我的临时解决方案是确保文档中需要替换的变量(以及用于检测变量的任何字符,例如:#name#)的字体完全相同,这样“运行属性”就不会被分解。
我还使用EditIx来确保变量位于一个“Run属性”中,但这并不理想,因为我希望用户稍后添加自己的变量。
我试图使用os.walk()获取文件夹中的所有文件,我使用的代码是: 我正试图通过打印根目录和文件名(如下所示)来消除这个问题,但偶尔会有一个损坏的“文件名”,比如“File4 name.rtf”。我有与“~$le4 name.rtf”相同的文件的另一个版本。问题是在这一步之后,我正在读取所有文件以提取文本,但在读取这些文件时,在名称旁边带有“~$”的文件时出现了一个错误。 下面,我尝试介绍所有不
问题内容: 我正在使用角度$ http从服务器下载文件。文件类型可以不同。我应该设置请求标头以进行身份验证。下载完成后,文件已损坏!这是我在客户端保存文件的代码: 问题答案: 我最终通过将以下配置添加到ajax请求中解决了该问题: 并将Blob类型更改为 “应用程序/八位字节流”
我正在尝试创建一个zip文件,以便能够通过http发送多个文件。 我的问题是,生成的Zip文件在发送之前和之后都“损坏”。问题是我无法找到我做错了什么,因为我在控制台中没有收到任何错误。 那么,有人有一个想法文件我生成的zip文件损坏? 这是我的代码: 谢谢你的帮助!
问题内容: 在构建战争文件时,我正在将一组罐子从某个位置复制到战争中的文件夹中。虽然文件确实会被复制,但是我认为它们已损坏,因为在战争之外被带出的jar的相同类文件会使用调试器打开,而从war文件中取出后不会打开。 这是我的战争pom.xml的一部分,我在其中复制了罐子 SomeSourceDirectory 有一些jar和其他文件结果是:myWar / somefolder / a.jar,但是
问题内容: 我以前使用Axios下载GET端点提供的文件。端点已更改,现在是POST,但是不需要参数。我正在更新原始的下载方法,但是返回了损坏的文件。 我不知道,如果问题出在,或如何响应的处理或全部的上方。到目前为止,我已经尝试了各种选择,但没有运气。任何建议将不胜感激! 我已经能够使用Postman下载文件,所以我知道端点提供的文件很好。我只是无法在我的React代码中理清参数来做到这一点。 问
我试图从一个网站下载所有pdf文件,但创建的每个pdf都已损坏。。。