如何在 C# 中从 XML 中删除一个完整的节点
How to remove a complete node from XML in C#
我有 C#
申请。下面是我的XML
<subscription>
<subscription_add_ons type="array">
<subscription_add_on>
<add_on_code>bike-o-vision</add_on_code>
<quantity type="integer">1</quantity>
</subscription_add_on>
<subscription_add_on>
<add_on_code>boxx</add_on_code>
<quantity type="integer">1</quantity>
</subscription_add_on>
</subscription_add_ons>
</subscription>
我需要的是如果我传递字符串 addOnCode = boxx,删除完整的节点,即
<subscription_add_on>
<add_on_code>boxx</add_on_code>
<quantity type="integer">1</quantity>
</subscription_add_on>
函数
XDocument xmlDoc = XDocument.Parse(xmlString);
XElement element = new XElement(
"subscription_add_on",
new XElement("add_on_code", "box"),
new XElement("quantity",
new XAttribute("type", "integer"),
1
)
);
xmlDoc.Root.Descendants(element.Name).Remove();
但不知何故,它没有按要求删除。
如何使用 XDocument 执行此操作?
谢谢!
您需要确定要在原始文档中删除的元素,然后对这些元素调用 .Remove()
。
在这里,我们要查找类型为 "subscription_add_on" 的文档中的所有元素,然后过滤到具有名为 "add_on_code" 的子元素的元素,其值为 "boxx".然后我们将它们全部删除。
xmlDoc.Root
.Descendants("subscription_add_on")
.Where(x => x.Element("add_on_code").Value == "boxx")
.Remove();
请注意 .Descendents()
将向下搜索多个级别(因此它会在 "subscription_add_ons" 元素内部查找 "subscription_add_on" 子元素),而 .Elements()
和 .Element()
只向下搜索一个级别。
参见MSDN docs on linq2xml, and in particular Removing Elements, Attributes, and Nodes from an XML Tree 。
我有 C#
申请。下面是我的XML
<subscription>
<subscription_add_ons type="array">
<subscription_add_on>
<add_on_code>bike-o-vision</add_on_code>
<quantity type="integer">1</quantity>
</subscription_add_on>
<subscription_add_on>
<add_on_code>boxx</add_on_code>
<quantity type="integer">1</quantity>
</subscription_add_on>
</subscription_add_ons>
</subscription>
我需要的是如果我传递字符串 addOnCode = boxx,删除完整的节点,即
<subscription_add_on>
<add_on_code>boxx</add_on_code>
<quantity type="integer">1</quantity>
</subscription_add_on>
函数
XDocument xmlDoc = XDocument.Parse(xmlString);
XElement element = new XElement(
"subscription_add_on",
new XElement("add_on_code", "box"),
new XElement("quantity",
new XAttribute("type", "integer"),
1
)
);
xmlDoc.Root.Descendants(element.Name).Remove();
但不知何故,它没有按要求删除。
如何使用 XDocument 执行此操作?
谢谢!
您需要确定要在原始文档中删除的元素,然后对这些元素调用 .Remove()
。
在这里,我们要查找类型为 "subscription_add_on" 的文档中的所有元素,然后过滤到具有名为 "add_on_code" 的子元素的元素,其值为 "boxx".然后我们将它们全部删除。
xmlDoc.Root
.Descendants("subscription_add_on")
.Where(x => x.Element("add_on_code").Value == "boxx")
.Remove();
请注意 .Descendents()
将向下搜索多个级别(因此它会在 "subscription_add_ons" 元素内部查找 "subscription_add_on" 子元素),而 .Elements()
和 .Element()
只向下搜索一个级别。
参见MSDN docs on linq2xml, and in particular Removing Elements, Attributes, and Nodes from an XML Tree 。