我正在使用以下代码片段从word模板创建一些单词文件(并替换一些单词):
File.Copy(sourceFile, destinationFile, true);
try
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(destinationFile, true))
{
string docText = null;
using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
{
docText = sr.ReadToEnd();
}
foreach (KeyValuePair<string, string> item in keyValues)
{
Regex regexText = new Regex(item.Key);
docText = regexText.Replace(docText, item.Value);
}
using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(docText);
}
}
}
但是当我尝试打开生成的文件时,我收到此错误:
我们很抱歉。我们无法打开XXX.docx,因为我们发现其内容存在问题
XML解析错误位置:部分:/word/document.xml,行:2,列:33686
以下是具体位置document.xml
的内容:
.....<w:szCs w:val="20"/><w:lang w:val="en-US"/></w:rPr><w:t> </w:t></w:r><w:proofErr w:type="spellEnd"/>....
其中33686是&amp; nbsp的位置。我该如何解决这个问题?
编辑在另一个在同一位置正确生成的文件中,我使用了一些用于测试的随机字符,这些字符也在文档标题中使用
答案 0 :(得分:0)
您似乎正在使用正则表达式直接修改XML,这通常会导致难以解决的问题,尤其是当您的任何正则表达式与任何可能被解释为XML的内容匹配时。
作为替代方案,您可能希望更深入地研究WordProcessDocument类。看起来它有类似Paragraph的强类型对象,你可以更安全地修改它。