2012-03-14 48 views
4

我有一些輸入標記是用一些HTML替換的佔位符。很多的HTML我與替換他們的時間只有一個標籤,這是很容易做到:使用HTML敏捷包替換具有多個節點的單節點

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

但是如果我想有兩個或多個節點HtmlNode.CreateNode(sReplacementString)更換inputNode只讀取第一個節點。有沒有辦法做一個替換sReplacementString是多個標籤?

+0

你能提供更多的上下文嗎?你可以用一個包含你的2個孩子的div來代替節點,或者類似的東西。 – 2012-03-14 18:25:29

+0

@SteveDanner我不想要任何額外的標記。 'inputNode.ParentNode'可以是任何東西,因此需要替換函數來工作! – Jon 2012-03-14 18:28:05

回答

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

現貨上,雖然我沒有刪除功能,所以我用'inputNode.ParentNode.RemoveChild(inputNode);' – Jon 2012-03-15 08:10:49

+0

正是我所需要的,我花了很長時間認爲這將是一個現有的方法,但似乎與HtmlAgilityPack有很多你需要爲自己寫的東西。 – 2012-08-23 14:17:24

相關問題