C# 试图在XmlNodeList上使用RemoveChild()会弄乱我的XmlNode集合
我正在尝试从名为listaWidths的XmlNodeList中删除特定节点。在使用RemoveChild()之前,此特定列表有5项。但是,在RemoveChild()语句之后,列表仅保留1项C# 试图在XmlNodeList上使用RemoveChild()会弄乱我的XmlNode集合,c#,xml,xpath,xmlnode,xmlnodelist,C#,Xml,Xpath,Xmlnode,Xmlnodelist,我正在尝试从名为listaWidths的XmlNodeList中删除特定节点。在使用RemoveChild()之前,此特定列表有5项。但是,在RemoveChild()语句之后,列表仅保留1项 XmlNodeList listaWidths = xmlDoc.SelectNodes("/MsBuild:Report/MsBuild:Body/MsBuild:ReportItems/MsBuild:Tablix/MsBuild:TablixBody/MsBuild:TablixColumns/*"
XmlNodeList listaWidths = xmlDoc.SelectNodes("/MsBuild:Report/MsBuild:Body/MsBuild:ReportItems/MsBuild:Tablix/MsBuild:TablixBody/MsBuild:TablixColumns/*", nsmgr);
int indexEpoca = 0;
XmlNode node = listaWidths[indexEpoca];
XmlNode parent = listaWidths[indexEpoca].ParentNode;
parent.RemoveChild(node);
这是一个RDL Reporting Services XML。
具体的XML代码如下所示:
<Tablix Name="Tablix3">
<TablixBody>
<TablixColumns>
<TablixColumn>
<Width>1.602in</Width>
</TablixColumn>
<TablixColumn>
<Width>1.61in</Width>
</TablixColumn>
<TablixColumn>
<Width>1.6323in</Width>
</TablixColumn>
<TablixColumn>
<Width>1.6023in</Width>
</TablixColumn>
<TablixColumn>
<Width>1.6033in</Width>
</TablixColumn>
</TablixColumns>
(...)
1.602英寸
1.61英寸
1.6323英寸
1.6023英寸
1.6033英寸
(...)
我尝试了所有可能的组合,但一点运气都没有。我做错了什么?
谢谢。清楚地说:“此方法返回的XmlNodeList对象将有效,而基础文档保持不变。如果基础文档发生更改,可能会返回意外结果(不会引发异常)。”
因此,在操作文档后,您对SelectNodes返回的XmlNodeList的体验可能不是您所期望的,而是与文档一致的。如果操作文档,则必须再次调用SelectNodes以获取新的XmlNodeList
在我看来,.NET framework中DOM实现的设计者犯了一个错误,他们将XmlNodeList用作抽象类,用于具有完全不同行为的具体实现。如果使用例如ChildNodes,则会得到符合W3C DOM规范要求的“活动”节点列表,因此在这种情况下,文档更改会自动更改节点列表(如果需要)。但是,SelectNodes返回的节点列表的行为与您所经历的完全不同 对不起,具体的问题是什么?在removeChild()方法之后,listaWidths列表只有1项,而它本来应该有4项,就像它原来有5项一样。我对变量进行了监视,一旦执行removeChild()方法,列表中就只有一项。