c# - 具有不同文件的 LINQ to XML

标签 c# linq-to-xml

我正在尝试编写一个通用实用程序,它将解析 XML 并返回一组客户。

问题是,其中一个文件缺少一个元素。

我想知道这种情况是否可以使用LINQ来处理。

当使用普通的 XPATH 或 XMLDocument 时,我们可以忽略这一点或在代码中分配默认值。

这是我的代码。

我的 XML 文件

客户1

<customers>
  <customer>
    <first_name>F1</first_name>
    <last_name>L1</last_name>
  </customer>
  <customer>
    <first_name>F2</first_name>
    <last_name>L2</last_name>
  </customer>
</customers>

客户2

<?xml version="1.0" encoding="utf-8" ?>
<customers>
  <customer>
    <first_name>F1</first_name>
    <middle_name>M1</middle_name>
    <last_name>L1</last_name>
  </customer>
  <customer>
    <first_name>F2</first_name>
    <middle_name>M2</middle_name>
    <last_name>L2</last_name>
  </customer>
</customers>

我的类(class)

public class Customer
      {
         public string FirstName { get; set; }
         public string MiddleName { get; set; }
         public string LastName { get; set; }
      }

我的用于解析这些 XML 文件的代码

XDocument doc = XDocument.Load(@"D:\\Projects\\Customer1.xml");

        var cCusts = from c in doc.Descendants("customer")
                     select new Customer
                     {
                         FirstName = c.Element("first_name").Value,
                         MiddleName = c.Element("middle_name").Value,
                         LastName = c.Element("last_name").Value,
                     };

现在,当我执行代码时,我收到“对象引用未设置”错误,我知道这是因为;它无法找到该元素。

但是使用相同的查询,如果元素不存在,我们实际上可以检查“null”吗?或者我是否需要为客户 1 和 2 编写不同的代码?

最佳答案

你可以做类似的事情

 LastName = c.Element("last_name")?.Value;

LastName = c.Element("last_name")?.Value ?? "N/A";

?.运算符(operator)将检查是否 c.Element("last_name")为 null 并返回 null(如果是)(这意味着您不会遇到异常)。如果你想添加一些默认值,你可以使用第二个选项,其中 ??检查前一个表达式是否为 null并给出LastName默认的“N/A”值。

此外,您还有额外的 ,LastName = c.Element("last_name").Value, 末尾.

关于c# - 具有不同文件的 LINQ to XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42827903/

相关文章:

c# - 如何将 Umbraco CMS 从使用 SQL Server CE 升级到 SQL Server 的升级版本?

c# - 一个关于 LINQ to XML 的简单问题

c# - 在使用命名空间前缀的文档上使用 Linq to XML 时出现问题

c# - 如何更改 XML 属性

c# - 格式异常 : Could not find any recognizable digits

c# - 添加此项目作为引用会导致循环依赖 mvvm

c# - 启动多个异步任务并在它们完成时处理它们 (C#)

c# - 如何使用Google Analytics(分析)API在C#中显示有关特定页面的信息

c# - XmlTextReader 与 XDocument

c# - 如何获得 XDocument 的独立副本?