我在这里看到了一些相关的问题,但它们并没有完全谈论我面临的同一个问题。
我想使用 HTML Agility Pack从我的 HTML 中删除不需要的标签而不丢失标签中的内容。
例如,在我的场景中,我想保留标签“b
”、“i
”和“u
”。
对于这样的输入:
<p>my paragraph <div>and my <b>div</b></div> are <i>italic</i> and <b>bold</b></p>
生成的 HTML 应该是:
my paragraph and my <b>div</b> are <i>italic</i> and <b>bold</b>
我尝试使用 HtmlNode
的 Remove
方法,但它也删除了我的内容。有什么建议吗?
最佳答案
我根据 Oded 的建议编写了一个算法。这里是。就像一个魅力。
它删除除strong
、em
、u
和原始文本节点之外的所有标签。
internal static string RemoveUnwantedTags(string data)
{
if(string.IsNullOrEmpty(data)) return string.Empty;
var document = new HtmlDocument();
document.LoadHtml(data);
var acceptableTags = new String[] { "strong", "em", "u"};
var nodes = new Queue<HtmlNode>(document.DocumentNode.SelectNodes("./*|./text()"));
while(nodes.Count > 0)
{
var node = nodes.Dequeue();
var parentNode = node.ParentNode;
if(!acceptableTags.Contains(node.Name) && node.Name != "#text")
{
var childNodes = node.SelectNodes("./*|./text()");
if (childNodes != null)
{
foreach (var child in childNodes)
{
nodes.Enqueue(child);
parentNode.InsertBefore(child, node);
}
}
parentNode.RemoveChild(node);
}
}
return document.DocumentNode.InnerHtml;
}
关于c# - HTML 敏捷包 - 在不删除内容的情况下删除不需要的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12787449/