删除XML根目录下的特定节点?

时间:2012-01-23 15:46:58

标签: c# .net xml linq linq-to-xml

我的XML在下面;

<XML ID="Microsoft Search Thesaurus">
 <thesaurus xmlns="x-schema:tsSchema.xml">
   <diacritics_sensitive>1</diacritics_sensitive>
   <expansion>
     <sub>Internet Explorer</sub>
     <sub>IE</sub>
     <sub>IE5</sub>
   </expansion>
   <expansion>
     <sub>run</sub>
     <sub>jog</sub>
   </expansion>
 </thesaurus>
</XML>

我想从XML中删除“扩展”节点。删除过程后,就像那样;

<XML ID="Microsoft Search Thesaurus">
 <thesaurus xmlns="x-schema:tsSchema.xml">

 </thesaurus>
</XML>

我的代码如下;

XDocument tseng = XDocument.Load("C:\\tseng.xml");
XElement root = tseng.Element("XML").Element("thesaurus");
root.Remove();
tseng.Save("C:\\tseng.xml");

我收到错误“对象引用没有设置为对象的实例。”对于“root.Remove()”行。 如何从XML文件中删除“扩展”节点?感谢。

3 个答案:

答案 0 :(得分:3)

使用:

仅删除expansion元素:

XNamespace ns = "x-schema:tsSchema.xml";
tseng.Root.Element(ns + "thesaurus")
    .Elements(ns + "expansion").Remove();

将删除thesaurus的所有子女:

XNamespace ns = "x-schema:tsSchema.xml";
tseng.Root.Element(ns + "thesaurus").Elements().Remove();

答案 1 :(得分:0)

这样的东西
XElement root = tseng.Element("XML").Element("thesaurus"); 
tseng.Element("XML").Remove(thesaurus);

您从其父级中删除节点...

如果你只想删除扩展节点,那么基本上你会找到一个删除直到tere不在同义词库中,或者返回它们的列表并循环从它们的父同义词库中删除它们。

答案 2 :(得分:0)

您没有成功,因为您的thesaurus具有不同的命名空间。您需要指定ti才能使其正常工作。

XNamespace ns = "x-schema:tsSchema.xml";
XDocument tseng = XDocument.Parse(xml);

XElement root = tseng.Element("XML").Element(ns + "thesaurus");
root.Elements().Remove();

一般来说,您的代码有效。您唯一需要删除的子元素不是root,以达到您需要的结果。