2014-09-06 44 views
1

我选择具有例如更改选定的节点上反映在主文档 - htmlagilitypack

HtmlDocument temp_HdDocument = new HtmlDocument(); 

temp_HdDocument.LoadHtml(mysource); 

var vrTempNewNode = temp_HdDocument.SelectSingleNode("//a")); 

更改节点这样

foreach (HtmlNode node in vrTempNewNode.SelectNodes("*")) 
{ 
    node.Remove(); 
} 

现在一个节点时,我就vrTempNewNode任何改变它也反映在temp_HdDocument

我该如何防止这种情况发生?我想选择节点,只需创建一个参考对象,但我想这是一个新的局部变量不是主文档

htmlagilitypack C#.NET 4.5的WPF

+0

你能更新你怎么改变它,以及您的问题... – Prix 2014-09-06 12:51:16

+0

“我想选择节点只是创建一个引用对象......”是的,你需要克隆/复制节点来获得独立的实体。 – 2014-09-06 12:59:03

+0

@Prix我添加了我如何修改 – MonsterMMORPG 2014-09-06 13:09:56

回答

2

的一部分这是默认的行为,而且在绝大多数情况是非常方便案件。您可以使用HtmlNode.CopyFrom()创建现有节点,然后可以修改,而不会影响原有的HtmlDocument,例如一个独立的副本:

var a = temp_HdDocument.SelectSingleNode("//a")); 
HtmlNode temp = HtmlNode.CreateNode("<a></a>"); 
temp.CopyFrom(a, false); 
+0

CopyFrom不起作用 – MonsterMMORPG 2014-09-06 13:21:48

+1

确定它与我想的方式一起工作:vrTempNewNode.CopyFrom(vrTempNewNode2,false); – MonsterMMORPG 2014-09-06 13:30:06

+0

你是对的,我刚刚尝试过。这似乎是一个错误:[HtmlNode.CopyFrom深层参数工作相反](https://htmlagilitypack.codeplex.com/workitem/26247) – har07 2014-09-06 13:30:59

相关问题