node.InnerHtmlから "img"と "a"タグを削除する

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 == "p" || node.Name != "img")
    {
        sb.Append(node.InnerHtml);
    }
}

今私のnode.InnerHtmlはこのhtmlです:

1。

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);
    }
}

2。

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);
    }
}

imgとタグを削除するには?

imgタグにクローズタグがありません

受け入れられた回答

私が2番のポイントを意味するのは分かりません。しかし、すべての<img>要素をHtmlNodeから削除したい場合は、次のようにしてください:

var imgs = node.SelectNodes("//img");
foreach (var img in imgs)
{
    img.Remove();
}

Remove()関数は親からHtmlNodeを削除します。これは、タグを閉じなくても、 <img>要素を削除するためにはうまく動作します。

更新:

このXPath式を使用して、単一の問合せですべての<img>および<a>要素を選択できます。

var imgs = node.SelectNodes("//img");
foreach (var img in imgs)
{
    img.Remove();
}

結果セットを一度反復してそれぞれを削除することができます。


人気のある回答

htmldocumentサンプルからこのremove htmlノード(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);
        }
    }



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ