提一个思路:
取出来的文本用List保存,并且在原文本插入占位符,如:
<p>博客园</p> <p>写代码的小2B</p>
操作之后:
List<String> array = new List<String>(); array.Add("博客园"); array.Add("写代码的小2B"); // do something。 //然后把array还原到原文本里面。
<p>{0}</p> <p>{1}</p>
重点是怎么插入占位符,因为html数据的不规范性,我没有自己解析,而是使用NSoup解析的
@meng5619:
以前没有用过NSoup发现还挺好用的。下面是我写的一个简单的例子,你感受一下:
class Program { static readonly String html = @"<h1>Hello<b>World</b></h1><p>博客园</p><p>写代码的小2B</p>"; static void Main(string[] args) { NSoup.Nodes.Element doc = new NSoup.Nodes.Element(NSoup.Parse.Tag.ValueOf("Root"), String.Empty); doc.Append(html); Do(doc); Console.WriteLine(doc); Console.ReadKey(); } static void Do(NSoup.Nodes.Node p) { for (var i = 0; i < p.ChildNodes.Count; i++) { var item = p.ChildNodes[i]; if (item is NSoup.Nodes.TextNode) { var e = new NSoup.Nodes.Element(NSoup.Parse.Tag.ValueOf("font"), String.Empty); e.Text((item as NSoup.Nodes.TextNode).Text()); p.ReplaceChild(item, e); } if (item.ChildNodes.Count > 0) Do(item); } } }
应该从NSoup里的文档生成回去吧
能具体点吗
没用过 NSoup,跟正则比性能怎么样
你要的效果是像搜索结果关键词飘红加亮那样吗?可以用Highlighter.Net啊
如果是要解析或替换html,用jumony(http://jumony.codeplex.com/),作者也在园子里