C#快速替换html文件中的文本

时间:2010-11-07 08:23:42

标签: c# html file text replace

我想用另一个HTML文件中的文本替换HTML文件中某个范围内的文本(如位置1000到200000)。有人可以推荐我最好的方法吗?

3 个答案:

答案 0 :(得分:5)

Pieter的方式可行,但确实涉及将整个文件加载到内存中。这可能没问题,但如果您有特别大的文件,您可能需要考虑另一种选择:

  • 在原始文件
  • 上打开TextReader
  • 为目标文件
  • 打开TextWriter
  • 重复调用Read / Write,使用8K字符的缓冲区复制文本块,直到您读取初始数量(示例中为1000个字符)
  • 再次打开阅读器并复制块
  • ,将替换文本写入目标编写器
  • 在原始文件中跳过要忽略的文本,重复读入缓冲区然后忽略它(递增计数器,这样你就知道你跳过了多少,当然)
  • 以相同的方式复制原始文件中的其余文本。

基本上它只是大量的复制操作,包括一个“副本”,它不会去任何地方(用于跳过原始文件中的文本)。

答案 1 :(得分:1)

试试这个:

string input = File.ReadAllText("<< input HTML file >>");
string replacement = File.ReadAllText("<< replacement HTML file >>");

int startIndex = 1000;
int endIndex = 200000;

var sb = new StringBuilder(
    input.Length - (endIndex - startIndex) + replacement.Length
);

sb.Append(input.Substring(0, startIndex));
sb.Append(replacement);
sb.Append(input.Substring(endIndex));

string output = sb.ToString();

答案 2 :(得分:-1)

替换代码Pieter发布了这项工作,使用具有已知结果长度的StringBuilder是一种节省性能的聪明方法。

应该按照您的要求进行操作,但有时在处理结构化数据(如html)时,最好将其加载为XML(我已使用HtmlAgilityPack)。然后,您可以使用XPath查找要替换的节点,并使用它。它可能会更慢,但正如我所说,你可以使用该结构。

相关问题