XLINQ:xml中缺少元素

Moh*_*san 2 linq-to-xml

我有以下xml

<students>
  <student>
    <id>12</id>
    <name>Mohsan</name>
  </student>
  <student>
    <id>2</id>    
  </student>
  <student>
    <id>3</id>
    <name>Azhar</name>
  </student>
</students>
Run Code Online (Sandbox Code Playgroud)

请注意,在2名称元素中缺失.

我必须使用Linq to XML读取这个xml

我使用以下代码来获取所有学生..

请建议我改进此代码

var stds = from std in doc.Descendants("student")
                select new
                {
                    ID = std.Element("id").Value,
                    Name = (std.Element("name")!=null)?std.Element("name").Value:string.Empty
                };
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

您可以使用以下事实:XElementtostring返回null,对于null XElement引用返回null .然后,您可以使用null-coalescing运算符从null转到空字符串:

var stds = from std in doc.Descendants("student")
           select new
           {
               ID = std.Element("id").Value,
               Name = (string) std.Element("name") ?? "";
           };
Run Code Online (Sandbox Code Playgroud)


Dew*_*wfy 5

使用'let'语法可以避免两次询问Element("name")

var stds = from std in doc.Descendants("student")
            let elName = std.Element("name") 
            select new
            {
                ID = std.Element("id").Value,
                Name = (elName!=null)?elName.Value:string.Empty
            };
Run Code Online (Sandbox Code Playgroud)