2012-03-14 3 views
4

일부 HTML로 바뀌는 자리 표시자인 입력 태그가 있습니다.HTML 민첩성 팩을 사용하여 단일 노드를 여러 노드로 바꿉니다.

HtmlNode node = HtmlNode.CreateNode(sReplacementString); 
inputNode.ParentNode.ReplaceChild(node, inputNode); 

그러나 나는 두 개 이상의 노드 HtmlNode.CreateNode(sReplacementString)inputNode을 대체 할 경우에만 첫 번째 노드를 읽고 다음 HTML 내가으로 대체하고있어 많은 시간이 충분히 쉽게 하나의 태그입니다. sReplacementString이 여러 개의 태그 인 경우 교체를 수행 할 수 있습니까?

+0

더 많은 컨텍스트를 제공 할 수 있습니까? 2 개의 자식을 포함하는 div 또는 그와 비슷한 노드로 노드를 대체 할 수 있습니다. –

+0

@SteveDanner 추가 마크 업은 필요 없습니다. 'inputNode.ParentNode'는 아무것도 될 수 없으므로 replace 함수가 필요합니다! – Jon

답변

5

내가 아는 한, 은 직접 할 방법이 없습니다. HtmlNode.CreateNode 메서드는 HTML 조각에서 단일 노드를 만듭니다. 여러 노드가있는 경우 첫 번째 노드 만 만들어집니다.

임시 노드를 만들고 sReplacementString에서 자식 노드를 만든 다음 inputNode 노드 바로 뒤에 이러한 자식 노드를 추가하고 마지막으로 inputNode을 제거 할 수 있습니다.

var temp = doc.CreateElement("temp"); 
temp.InnerHtml = sReplacementString; 
var current = inputNode; 
foreach (var child in temp.ChildNodes) 
{ 
    inputNode.ParentNode.InsertAfter(child, current); 
    current = child; 
} 
inputNode.Remove(); 
+0

Spot on, Remove 함수가 없기 때문에 inputNode.ParentNode.RemoveChild (inputNode);를 사용했습니다. – Jon

+0

정확히 내가 필요한 것이 었습니다. 오랜 시간이 걸렸지 만 이것은 기존 방법이라고 생각했지만 HtmlAgilityPack 자신을 위해 자주 작성해야하는 임의의 항목이 있습니다. –

관련 문제