删除 XML 根下的特定节点?

发布于 2024-12-28 15:07:49 字数 954 浏览 0 评论 0原文

我的 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 中删除“扩展”节点。去掉process后就是这样;

<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 文件中删除“扩展”节点?谢谢。

My XML is below;

<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>

I want to remove the "expansion" nodes from the XML. After removing process, it would be like that;

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

 </thesaurus>
</XML>

My code is below;

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

I got an error "Object reference not set to an instance of an object." for line "root.Remove()".
How can I remove the "expansion" nodes from XML file? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千秋岁 2025-01-04 15:07:49

使用:

仅删除扩展元素:

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

将删除同义词库的所有子元素:

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

Use:

Will remove only expansion elements:

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

Will remove all children of thesaurus:

XNamespace ns = "x-schema:tsSchema.xml";
tseng.Root.Element(ns + "thesaurus").Elements().Remove();
べ繥欢鉨o。 2025-01-04 15:07:49

就像

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

你从它的父节点中删除一个节点...

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

Something like

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

You remove a node from it's parent...

if you want to remove just the expansion nodes, then basically you find a remove until tere aren't any in thesaurus, or return a list of them and loop through removing them from their parent thesaurus.

趁微风不噪 2025-01-04 15:07:49

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

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

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

一般来说,您的代码有效。您唯一需要删除非根元素的子元素才能达到您需要的结果。

You have no success because your thesaurus have different namespace. You need to specify ti to get it works.

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

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

In general your code valid. The only thing that you need to delete child elements not root to reach results you needed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文