【问题标题】:Add XElement only if value exists仅当值存在时才添加 XElement
【发布时间】:2013-09-03 22:58:33
【问题描述】:

我正在使用 Linq-To-XML 创建一个 XDocument,如下所示:

Order order = GetOrder();

XDocument doc = new XDocument(
    new XElement("purchaseOrder",
        new XElement("Name", order.Name),
        new XElement("Address", order.Address),
        new XElement("Shipper", order.Shipper)
    )
);

所以有时订单没有发货人,它将为空。在这种情况下,我根本不想包含 Shipper 元素。

创建文档时如何在我的代码中内联?

【问题讨论】:

    标签: c# .net linq linq-to-xml


    【解决方案1】:

    只需检查Shipper 值是否为空。如果不是,则添加您的元素,否则只需将其设置为 null。构造函数中的 null 值转换为没有添加任何内容。

    Order order = GetOrder();
    
    XDocument doc = new XDocument(
        new XElement("purchaseOrder",
            new XElement("Name", order.Name),
            new XElement("Address", order.Address),
            order.Shipper != null ? new XElement("Shipper", order.Shipper) : null
        )
    );
    

    【讨论】:

    • 好答案。如果即使数据不可用也需要添加元素,您可以使用: order.Shipper != null ?新 XElement("Shipper", order.Shipper) : 新 XElement("Shipper", "")
    【解决方案2】:

    我将部分地形成 xml,而不是一次形成所有的 xml。 (更容易阅读,更容易调试

    XDocument doc = new XDocument();
    
    var order = new XElement("purchaseOrder",
                    new XElement("Name", order.Name),
                    new XElement("Address", order.Address));
    
    if(order.Shipper!=null) order.Add(new XElement("Shipper", order.Shipper));
    
    doc.Add(order);
    

    【讨论】:

      【解决方案3】:

      我会有这样的东西:

      Order order = GetOrder();
      
      XDocument doc = new XDocument(
          new XElement("purchaseOrder",
              new XElement("Name", order.Name),
              new XElement("Address", order.Address),
              OptionalXElement("Shipper", order.Shipper)
          )
      );
      

      有时我还是有一个 XElement 的子类(自动添加一个命名空间),并在其中添加静态帮助器:

      MyXElement.CreateIfNeeded("Shipper", order.Shipper);
      

      【讨论】:

        猜你喜欢
        • 2021-12-03
        • 2016-10-19
        • 2023-03-19
        • 2019-03-05
        • 2012-04-11
        • 1970-01-01
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多