2013-09-03 3 views
0

Я создаю XDocument с помощью Linq-To-XML, как это:Добавить XElement только если значение существует

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.

Как я могу сделать это в моем коде при создании документа?

ответ

2

Я бы сформировал 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

Просто проверьте, равно ли значение 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 
    ) 
); 
+0

Хороший ответ. И если вам нужно добавить элемент, даже если данные недоступны, вы можете использовать: order.Shipper! = Null? новый XElement («Грузоотправитель», order.Shipper): новый XElement («Грузоотправитель», «») – tomepenn

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 в любом случае (для автоматического PREPEND пространства имен), и добавить статический хелпер к нему:

MyXElement.CreateIfNeeded("Shipper", order.Shipper); 
Смежные вопросы