经过一番搜索,我找到了一个解决方案来修改HtmlNodes
(Html Agility Pack),同时迭代它们。在此示例中,标记将作为父标记添加到每个标记。我使用以下代码(c#):
foreach(HtmlNode currentNode in descendants.ToList())
{
if (workingnode.name == "strong"){
HtmlNode theParent = workingNode.ParentNode;
HtmlNode newElement = workingDocument.CreateElement("a");
newElement.SetAttributeValue("href", "Glossary.xhtml#gloss");
newElement.AppendChild(workingNode);
theParent.ReplaceChild(newElement, workingNode);
}
}
在迭代它们之前对我的后代使用ToList()
方法有什么缺点?我只是担心如果这很容易做到,那将是大多数HtmlNode
修改问题的第一个建议。
答案 0 :(得分:1)
ToList
方法将遍历集合并将每个项目添加到通用List
。如果您的descendants
变量是IEnumerable<T>
或其他集合类型,那么在ToList
上调用foreach
是没有意义的,因为IEnumerable<T>
循环可以接受for (int i = descendants.Count() - 1; i >= 0; i--)
{
// Modify the document by adding a parent or removing this node.
}
输入为标准。因此,如果这是真的,那么以下行会更有效率,因为它不必遍历集合来创建另一个集合:
{{1}}