Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图在XmlNodeList上使用RemoveChild()会弄乱我的XmlNode集合_C#_Xml_Xpath_Xmlnode_Xmlnodelist - Fatal编程技术网

C# 试图在XmlNodeList上使用RemoveChild()会弄乱我的XmlNode集合

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/*"

我正在尝试从名为listaWidths的XmlNodeList中删除特定节点。在使用RemoveChild()之前,此特定列表有5项。但是,在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 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()方法,列表中就只有一项。