Reputation: 18869
I'm creating an XDocument using Linq-To-XML, like this:
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)
)
);
So sometimes an order will not have a Shipper, it will be null. In that case, I don't want to include the Shipper element at all.
How can I do that inline in my code when creating the doc?
Upvotes: 0
Views: 2196
Reputation: 1364
I would have something like this:
Order order = GetOrder();
XDocument doc = new XDocument(
new XElement("purchaseOrder",
new XElement("Name", order.Name),
new XElement("Address", order.Address),
OptionalXElement("Shipper", order.Shipper)
)
);
Sometimes I have a subclass of XElement anyway (to automatically prepend a namespace), and add the static helper to it:
MyXElement.CreateIfNeeded("Shipper", order.Shipper);
Upvotes: 1
Reputation: 15364
I would form the xml in parts instead of forming all of it at once. (easier to read, easier to debug)
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);
Upvotes: 3
Reputation: 134521
Just check if the Shipper
value is null. If it isn't, then add your element, otherwise just set it to null. A null value in the constructor translates to nothing added in its place.
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
)
);
Upvotes: 4