2012-03-14 47 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

相关问题