使用HTML Agility Pack將多個節點替換為單個節點


我有一些輸入標籤是佔位符,我用一些HTML替換。很多時候我用它替換它們的HTML只有一個標籤,這很容易:

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

但是,如果我想用兩個或更多節點替換inputNodeHtmlNode.CreateNode(sReplacementString)只讀取第一個節點。有沒有辦法在sReplacementString是多個標籤的情況下進行替換?

一般承認的答案

據我所知,沒有直接的方法可以做到這一點。 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();




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因