2016-10-14 3 views
1

私は親ノードを削除して子ノードに置き換えるにはどうしたらいいですか?親ノードは削除しますが、子ノードのhtmlagilityパックは保持しますか?

私の目標は、画像から発信リンクを削除することです。私は、画像を損なわずにリンクに画像を作成するものを削除するだけで、通常のリンクを削除したくない。 例:

<a href="http://www.w3schools.com"><img src="logo_w3s.gif"></a> 

を交換してなることが必要です。のような何かが

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(maintext); 
dynamic allimages = doc.DocumentNode.Descendants("img").ToList; 

if (scrapeimages.Checked) { 
    //the user does want images scraped. Remove image outbound links 
    try { 
     foreach (void n_loopVariable in allimages) { 
      n = n_loopVariable; 
      if (n.ParentNode.Name == "a") { 
       dynamic outer = n.OuterHtml; 
       dynamic newnode = HtmlNode.CreateNode(outer); 

       n.ParentNode.ReplaceChild(n.ParentNode, newnode); 

      } 
     } 
     maintext = doc.DocumentNode.OuterHtml; 
    } catch { 
    } 
} 
+0

を持っている場合。 –

+0

私の答えをチェックし、あなたが助けてくれたら教えてください。 – mybirthname

+1

地獄はいそうでした。私はそのようにすることは決して考えなかったでしょう。ありがとうございました! –

答えて

1
var node = doc.DocumentNode.SelectSingleNode(yourANode); 
node.ParentNode.RemoveChild(node, true); 

<img src="logo_w3s.gif"> 

ここでは動作しません。私のコードですが、私が近づいている感じこれにより、親ノードの子が削除されます。<a>を返しますが、grandChildrenを保持します。 RemoveChildのこの真のパラメータはkeepGrandChildを示します。

すべて<img>はところで、私はおそらく、なぜ奇妙なエラーがありますので、もしVb.netからのC#にこれを変換するコンバータを使用<a>

var nodeList = doc.DocumentNode.SelectNodes("img"); 

for(HtmlNode node in nodeList) 
{ 
    var parentATagNode = node.Parent.Parent; 
    parentATagNode.RemoveChild(node.Parent, true); 
} 
関連する問題