LINQ to XML: don't get XElement

本文关键字:get XElement to XML don LINQ | 更新日期: 2023-09-27 18:11:25

这应该很容易,但我真的没有看到我的错。

public static void Edit(string old, string neew, string type)
    {
        XElement root = XElement.Load(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "''Xml.xml");
        switch (type)
        {
            case "Customer":
                XElement name = root.Descendants("Data").Descendants("Customer")
                    .Where(x => x.Element("Name").Value.ToString() == old)
                    .FirstOrDefault();
                name.SetElementValue("Name", neew);
                break;

XElement name返回null,因此得到NullReferenceException。但我不知道,为什么它只返回null。

我的Xml结构:

<Data>   
            <Customer>
                <Name>CustomerA</Name>
                <IP>888.888.888.888</IP>
                <UserLogin>auser</UserLogin>
                <UserPw>apwd</UserPw>   
            </Customer>   
            <Customer>
                <Name>CustomerB</Name>
                <IP>102.16.70.181</IP>
                <UserLogin>buser</UserLogin>
                <UserPw>bpwd</UserPw>   
            </Customer> 
        </Data>
也许有人能让我睁开眼睛帮帮我?或者给点提示?

LINQ to XML: don't get XElement

似乎Data已经是您的根元素。您可以使用root.Elements("Customer")root.Descendants("Customer")代替。

除此之外,XElement.Value属性的类型是string,所以你不需要调用ToString对它。您还可以考虑使用显式强制转换,如(string)x.Element("Name") == old,以避免在未找到元素时出现异常。