【发布时间】:2017-06-22 17:07:43
【问题描述】:
假设我有一个这样的 html 文档:
<!DOCTYPE html>
<html>
<head>
<title>MyTest</title>
</head>
<body>
<div id="p_123">
MyText Here
<div id="p_456">
MyText Again
</div>
</div>
</body>
</html>
我正在尝试使用替换正则表达式使用 HtmlAgilityPack 解析它,该替换正则表达式将搜索文本包装在 span 标记中以进行突出显示。所以结果突出显示的文本应该是这样的:
<!DOCTYPE html>
<html>
<head>
<title>MyTest</title>
</head>
<body>
<div id="p_123">
<span class="highlighted">MyText</span> Here
<div id="p_456">
<span class="highlighted">MyText</span> Again
</div>
</div>
</body>
</html>
问题是,如果我循环遍历 div,我最终会在 div p_456 上突出显示两次,因为 p_123 还包含 p_456。实际结果如下:
<!DOCTYPE html>
<html>
<head>
<title>MyTest</title>
</head>
<body>
<div id="p_123">
<span class="highlighted">MyText</span> Here
<div id="p_456">
<span class="highlighted"><span class="highlighted">MyText</span></span> Again
</div>
</div>
</body>
</html>
我正在使用如下代码:
HtmlDocument doc = new HtmlDocument();
doc.Load(someDataStream);
foreach (HtmlNode n in doc.DocumentNode)
{
string evaluator = m => "<span class=\"highlighted\">" + m.Value + "</span>";
n.InnerText = Regex.Replace(n.InnerText, "MyText", evaluator);
}
有没有办法让我选择 p_123 的 InnerText 时只返回文本“MyText Here”?没有其他div?或者有其他方法吗?
【问题讨论】:
标签: c# html html-agility-pack