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)
您当前正在寻找一个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)