我试图移除一个的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节点列表具有完全不同的行为,因为你经历。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top