在C#中从XML删除元素

Ham*_*sir 1 c# xml xelement xml-parsing

下面是xml,我需要删除代码等于“ ZOOMLA”的Element SMS。我正在使用C#代码,如下所示,但它不起作用。并给我“对象引用错误”

 XDocument doc = XDocument.Parse (xml);
 XElement sms = (from xml2 in doc.Descendants ("SMSList").Descendants ("SMS") where xml2.Attribute ("Code").Value == code select xml2).FirstOrDefault ();
 sms.Remove ();
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-16" ?>
    <Parent>
        <ServiceList />
        <VoiceList />
        <SMSList>
            <SMS>
                <Code>ZOOMLA</Code>
                <Name>Zoom Limited</Name>
                <SubType>Prepaid</SubType>
                <Fields>
                    <Field>
                        <ID>222</ID>
                        <Name>Charges</Name>
                        <CValue>1</CValue>
                        <Priority>0</Priority>
                    </Field>
                </Fields>
            </SMS>
        </SMSList>
        <DataList />
        <LBCOffer />
    </Parent>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

您当前正在寻找一个Code 属性,而在XML中则是一个element。因此FirstOrDefault()什么也找不到,并返回null,因此下一条语句会出现异常。

另外,您可以仅使用LINQ to XML Remove扩展方法IEnumerable<T> -这意味着它将删除所有匹配的元素,因此即使没有任何匹配元素也不会失败。(如果您确实只想删除第一个匹配项,则可以始终Take(1)在此处使用。)

XDocument doc = XDocument.Parse(xml);
doc.Descendants("SMSList")
   .Descendants("SMS")
   .Where(x => (string) x.Element("Code") == code)
   .Remove();
Run Code Online (Sandbox Code Playgroud)