2016-10-14 3 views
1

좋아, 어떻게 부모 노드를 제거하고 자식 노드로 바꿀 수 있습니까?부모 노드를 제거하고 자식 노드 htmlagility 팩을 유지 하시겠습니까?

내 목표는 이미지에서 발신 링크를 제거하는 것입니다. 나는 정상적인 링크를 제거하고 싶지 않다. 이미지를 그대로 유지하면서 링크로 이미지를 만드는 것을 제거한다. 예 :

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

는 교체 될해야합니다

<img src="logo_w3s.gif"> 

여기에 작동하지 않는 내 코드입니다하지만 난 느낌이 점점 가까이 :

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

<a>가 Btw은 내가 C 번호에 Vb.net에서이 변환하는 컨버터를 사용하는 경우. –

+0

내 대답을 확인하고 도움이되었는지 알려주십시오. – mybirthname

+1

지옥 그렇습니다. 그렇게 생각하지 않았을 것입니다. 고맙습니다! –

답변

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

뭔가 같은 이 도움이 될 경우 부모 노드의 하위 노드 인 내이 삭제됩니다. 0이지만 grandChildren을 유지합니다. RemoveChild의이 실제 매개 변수는 keepGrandChild을 나타냅니다.

아마 왜 이상한 오류가있다, 그래서 만약 모든 <img>

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

for(HtmlNode node in nodeList) 
{ 
    var parentATagNode = node.Parent.Parent; 
    parentATagNode.RemoveChild(node.Parent, true); 
}