C# 删除“;img";及;a「;node.InnerHtml中的标记

C# 删除“;img";及;a「;node.InnerHtml中的标记,c#,html,html-agility-pack,C#,Html,Html Agility Pack,我只想从html中提取文本 var sb = new StringBuilder(); doc.LoadHtml(inputHTml); foreach (var node in Doc.DocumentNode.ChildNodes) { if (node.Name == "strong" || node.Name == "#text" || node.Name == "br" || node.Name == "div" || node.Name

我只想从html中提取文本

var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

foreach (var node in Doc.DocumentNode.ChildNodes)
{
    if (node.Name == "strong" || node.Name == "#text" 
        || node.Name == "br" || node.Name == "div" 
        || node.Name == "p" || node.Name != "img")
    {
        sb.Append(node.InnerHtml);
    }
}
现在在my node.InnerHtml中是以下html:

一,


文本,文本文本
二,

text
如何删除img和a标签

img标签没有关闭标签参见此示例。 您也可以这样做:

       var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

        foreach (var node in doc.DocumentNode.ChildNodes)
    {
        if (node.Name != "img" && node.Name!="a")
        {
            sb.Append(node.InnerHtml);
        }
    }
请参考此示例。 您也可以这样做:

       var sb = new StringBuilder();
doc.LoadHtml(inputHTml);

        foreach (var node in doc.DocumentNode.ChildNodes)
    {
        if (node.Name != "img" && node.Name!="a")
        {
            sb.Append(node.InnerHtml);
        }
    }

我不知道第二点是什么意思。但是,如果要从
HtmlNode
中删除所有
元素,可以尝试以下方法:

var imgs = node.SelectNodes("//img");
foreach (var img in imgs)
{
    img.Remove();
}
Remove()
函数将从其父节点中删除
HtmlNode
。这对我来说很好,可以删除
元素,即使没有结束标记

更新:

可以使用此XPath表达式在单个查询中选择所有
元素:

node.SelectNodes("//*[self::img or self::a]");

然后您可以在结果集中迭代一次,以删除其中的每一个。

我不知道第2点是什么意思。但是,如果要从
HtmlNode
中删除所有
元素,可以尝试以下方法:

var imgs = node.SelectNodes("//img");
foreach (var img in imgs)
{
    img.Remove();
}
Remove()
函数将从其父节点中删除
HtmlNode
。这对我来说很好,可以删除
元素,即使没有结束标记

更新:

可以使用此XPath表达式在单个查询中选择所有
元素:

node.SelectNodes("//*[self::img or self::a]");
然后,您可以遍历结果集一次,以删除其中的每一个