我希望在需要更换位的文档是常量(一种mailmerge场景)时,以最快捷的方式进行替换。
当然有很多方法可以使用string.replace和regexp进行替换,但看起来每次查找匹配时都需要解析输入文档。这就是我想要优化的一点。
答案 0 :(得分:2)
我想说你最好的选择可能是将文档拆分成一个数组,每个元素都是前一个替换文件和下一个替换文件之间的文本。然后,您只需使用字符串连接将每个替换标记交错分割数组的内容而不是替换。
一些伪代码:
doc_array = split(input_doc, "token marker")
for each replace_array in set_of_replace_arrays:
this_doc = ""
while elements remain in doc array:
this_doc.concat(next doc element)
if any elements remain in replace array:
this_doc.concat(next replace element)
output this_doc
答案 1 :(得分:0)
好吧,因为您不想解析并且输入文档是常量,所以您可以使用MemoryStream
来处理原始文档并使用它们的绝对位置来更改位。
另一种方法是使用String.Format
标记作为占位符:
string input = "Dear {0} {1}";
//...
return String.Format(input, "Mr.", "Farias");
答案 2 :(得分:0)
为了提高灵活性,您可以使用XslCompiledTransform并输出文本。它针对快速XML和文本生成进行了优化,如果需要,您也可以包含一些逻辑。