试图在混乱的XmlNodeList使用removeChild之()我的XmlNode的收藏
-
21-09-2019 - |
题
我试图移除一个的XmlNodeList名为listaWidths的特定节点。这种特殊的列表中有5个项目之前,我使用removeChild之()。但是,在removeChild之()语句后,列表仅停留1项。
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报告服务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>
(...)
我已经试过各种组合可能,没有运气任何责任。我究竟做错了什么? 谢谢你。
解决方案
的SelectNodes的文档清楚地说:“的XmlNodeList对象而底层文档保持不变此方法返回将是有效的。如果底层文件的变化,意想不到的结果可被返回(不将引发异常)。“
那么,你与你操纵文档后,可能不是你所期望的,但与文档专线的SelectNodes返回你的XmlNodeList体验。你将不得不再次调用的SelectNodes如果你操作的文档以获得新的XmlNodeList。
在我认为在.NET框架中的DOM实现的设计者通过使用的XmlNodeList作为抽象类的具体实现与完全不同的行为犯了一个错误。如果使用例如的childNodes那么你得到一个符合“活”的节点列表什么的W3C DOM规范在这种情况下(如果需要)的文档的变化自动改变节点列表需要如此。但是返回的SelectNodes节点列表具有完全不同的行为,因为你经历。
不隶属于 StackOverflow