从XML在C#中删除元素[复制](Removing Element from XML in C# [

2019-10-21 11:12发布

这个问题已经在这里有一个答案:

  • 如何删除文件的XML元素? 3个回答

下面是XML,我需要删除的元素短信,其中代码等于“ZOOMLA”。 我使用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 ();

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

Answer 1:

目前您正在寻找一个Code 属性 ,而在你的XML是一个元素 。 所以FirstOrDefault()没有找到任何东西,在下面的语句返回空值,因此例外。

此外,您可以只使用LINQ到XML Remove的扩展方法IEnumerable<T> -这意味着它会删除所有匹配元素,因此,如果没有任何它不会失败。 (如果你真的想,只除去第一场比赛,你总是可以使用Take(1)在这里。)

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


Answer 2:

而您正在寻找的代码是不是一个属性,但元素的父是根元素。 首先加载XML字符串的XMLDocument然后找到SMS节点。

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(@"<?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>");
        XmlNode xNode = xmlDoc.SelectSingleNode("/Parent/SMSList/SMS[Code='ZOOMLA']");
        xNode.ParentNode.RemoveChild(xNode);
        XmlDocument xvDoc = xmlDoc;


文章来源: Removing Element from XML in C# [duplicate]