Vb.net XElement.Remove(XNode.Remove)不';行不通
我试图从父节点中删除单个节点,我尝试了该方法,但似乎不起作用。这是怎么做到的?这是虫子还是什么Vb.net XElement.Remove(XNode.Remove)不';行不通,vb.net,linq-to-xml,xelement,Vb.net,Linq To Xml,Xelement,我试图从父节点中删除单个节点,我尝试了该方法,但似乎不起作用。这是怎么做到的?这是虫子还是什么 Sub Main() Dim xml = <?xml version="1.0" encoding="utf-8"?> <Products> <Product name="ABC-1" link="http://www.site.com/1"/> <Product name="ABC-2" link="http://
Sub Main()
Dim xml =
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Product name="ABC-1" link="http://www.site.com/1"/>
<Product name="ABC-2" link="http://www.site.com/2"/>
<Product name="ABC-3" link="http://www.site.com/3"/>
</Products>
Dim products = xml.Root.<Product>
'works - uncomment
'products.Remove()
'Doesn't work
For Each product In products
product.Remove()
Next
xml.Save(FailedFilename)
End Sub
Sub-Main()
dimXML=
Dim products=xml.Root。
'作品-取消注释
'products.Remove()
“不行
对于产品中的每个产品
product.Remove()
下一个
xml.Save(失败文件名)
端接头
在产品上循环时删除节点会导致对其进行修改。由于它是一个IEnumerable
,为了一次处理整个结果,您需要避免延迟求值。为此,只需添加对ToArray()
或ToList()的调用即可:
请注意,上面的代码段相当于下面的代码段。这与声明产品时添加ToArray()
变量不同:
Dim temp = products.ToArray()
For Each product In temp
product.Remove()
Next
您遇到的问题在这个MSDN页面上得到了很好的总结:,特别是标题为“在迭代时删除”的部分
除非您需要在删除每个产品之前使用它,否则使用的第一种方法要简单得多:products.Remove()
产品中没有任何Remove(t)
方法<代码>产品。删除(产品)
什么是“不工作”的意思?@JohnSaunders这意味着元素仍然存在于其父元素下。
Dim temp = products.ToArray()
For Each product In temp
product.Remove()
Next