【发布时间】:2016-01-11 23:13:53
【问题描述】:
我有一个包含类似这样的字符串:
string text = "<p>test <span> <font> here </font> </span> try</p><p> <font> try 2</font> </p>"
我需要的是过滤这样的东西:
将文本保留在 P 中 删除跨度和内容(字体和文本) 如果直接父级不是 Span*,则将 Text 保留在字体内
我拥有的是:
StringBuilder sbtexttoCorrect = new StringBuilder();
HtmlDocument html = new HtmlDocument();
html.LoadHtml(textToFormat);
var nodes = html.DocumentNode.SelectNodes("//p");
foreach (var line in nodes)
{
if (line.Name =="SPAN")
{
line.RemoveAllChildren();
line.Remove();
}
}
foreach (var txt in nodes)
{
sbtexttoCorrect.Append(txt.InnerText);
}
但是最后的 sbtexttoCorrect 仍然得到 span 的子字体。即使使用 Removechild 和他自己的 Remove。
我错过了什么?
注意:在另一个帖子上有人告诉我:
foreach (var line in nodes.Select(node => node.ChildNodes.Where(
childNode => childNode.Name != "span"))
.Select(
textNodes => textNodes.Aggregate(String.Empty, (current, node) => current + node.InnerText)))
{
sbtexttoCorrect.Append(line);
}
但是我不明白所有的语法,所以我想重写我自己的尝试,而且它也没有一直工作,它仍然在 Span 中获取 Font 中的文本。
注意 2 我找不到关于 Agilty Pack 规格的任何文档。如果有人知道在哪里可以找到它,我想了解更多关于这个库的信息。
编辑真正的 HTML 要复杂得多,有许多我不知道的 childNode,它们可以是 TD 或 DIV,唯一真正确定的是当有span 我需要跳过他的内容和他的 childNode
【问题讨论】:
-
我编辑了我的答案。它现在独立地删除它们在 html 中的哪个级别的所有跨度
标签: c# html-agility-pack