【发布时间】:2009-01-19 01:07:32
【问题描述】:
我是 C# 和 Linq 的新手。我正在尝试使用 Linq 生成的元素集合来迭代和修改 XDocument 中的某些元素。我的理解是树更新时枚举不会更新。
例如,给定文档
<root xmlns:ns="http://dummy">
<ns:a/>
<ns:b/>
<c/>
<ns:a><ns:a/></ns:a>
</root>
和代码
XDocument doc = XDocument.Load(@"test_input.xml", LoadOptions.PreserveWhitespace);
XNamespace ns = "http://dummy";
IEnumerable<XElement> elem_list = from elem in doc.Descendants()
where elem.Name.Namespace == ns
select elem;
foreach (XElement elem in elem_list) {
if (elem.Name.LocalName == "a") {
elem.Remove();
}
}
给出错误,因为(我认为)嵌套的“a”元素已从树中删除,但仍“存在”在 elem_list 中。
我该如何解决这个问题,请记住 (1) 我想要执行的实际操作涉及比上述示例更复杂的树操作(即复制),以及 (2) 我正在工作带有大量空白的混合内容?其他 .Net XML 文档类是否有一种迭代方式,随着树的变化而更新?
【问题讨论】: