HTMLAgilityパックを使用して、文書内のノードをテキストノードに置き換えたいと考えています。この目的は、ノード自体を囲むタグを削除することです。現在、私は次のようなことをしています:
//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);
これを行うより良い方法はありますか?新しいテキストノードを作成しようとすると、以下のようなコードスニペットを実行すると、無効なキャストエラーが表示されます。
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
{
HtmlNode hNewNode = hd.CreateTextNode(hChildNode.InnerHtml);
hChildNode.ParentNode.ReplaceChild(hNewNode, hChildNode);
}
(誤植が指摘された後に更新されましたが、問題は依然として残ります)
私は方法を間違って使用していますか?このような機能を実行するために使用する別の方法がありますか?ありがとう。
この目的は、ノード自体を囲むタグを削除することです
あなたの2番目のコードは、1つのタイプミスを除いて正確にタグの除去を実行します(私は推測します):
HtmlNode hNewNode = hd.CreateTextNode(hNewNode.InnerHtml);
hNewNode.InnerHtml
をhChildNode.InnerHtml
置き換えるhNewNode.InnerHtml
がhChildNode.InnerHtml
ます。そうしないと、コードがコンパイルされません(割り当てられていない変数の使用)。
また、テキストノードを作成した後、置換されたノードの子ノードはありません(代わりに、ノードが置き換えられたInnerHtml
プロパティと同じ値をInnerHtml
ます)。