仅在值存在时添加XElement

时间:2013-09-03 22:58:33

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

我正在使用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元素。

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

3 个答案:

答案 0 :(得分:4)

只需检查Shipper值是否为空。如果不是,则添加元素,否则只需将其设置为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
    )
);

答案 1 :(得分:3)

我会在部分形成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);

答案 2 :(得分:1)

我会有这样的事情:

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);