如何查找XML的节点并将其删除

时间:2013-01-05 21:22:43

标签: c# asp.net xml

我有像这样的xml

<Order>
 <OrderSections>
      <OrderSection type="1" name="S 1" id="3">
         <ShippingAmount>15.02</ShippingAmount>
      </OrderSection>
      <OrderSection type="1" name="S 2" id="4">
         <ShippingAmount>0</ShippingAmount>
      </OrderSection>
 </OrderSections>
</Order>

如何找到id = 4的订单部分并将其从XmlDocument中删除?我正在查看this example,但这是不同的,因为搜索的值属于类似

的节点
<players>
<player> 
    <name>User2</name>
 </player>
</players>

但我的XML在<OrderSection>属性值中包含id。

3 个答案:

答案 0 :(得分:3)

您需要使用@作为属性:

XmlNode node = doc.SelectSingleNode("/Order/OrderSections/OrderSection[@id='4']");
node.ParentNode.RemoveChild(node);

查看XPath Syntax

答案 1 :(得分:2)

使用XmlDocument类和xpath查找元素

string path = "orders.xml";
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.Load(path);
foreach (XmlNode entry in XMLDoc.SelectNodes("//OrderSection[@id='4']"))
{
    entry.ParentNode.RemoveChild(entry);
}

答案 2 :(得分:0)

您可以使用Linq to Xml:

var xdoc = XDocument.Load(path_to_xml);
xdoc.Descendants("OrderSection")
    .Where(os => (int)os.Attribute("id") == 3)
    .Remove();
xdoc.Save(path_to_xml);