У меня возникли проблемы с сокрытием XElements без данных.
Если у меня есть этот код:
string missing = string.Empty;
XElement missingNodes = new XElement("TOPLEVEL",
new XElement("FIELD1", "VALUE1"),
new XElement("FIELD2", missing),
new XElement("FIELD3", "VALUE3")
);
В итоге я строю эту схему:
<TOPLEVEL>
<FIELD1>VALUE1</FIELD1>
<FIELD2></FIELD2>
<FIELD3>VALUE3</FIELD3>
</TOPLEVEL>
Если я изменю отсутствующее значение на null вместо String.Empty, второе поле станет следующим:
<FIELD2 />
Есть ли простой способ скрыть узлы с пустыми/нулевыми данными?
Я бы хотел, чтобы это выглядело примерно так:
<TOPLEVEL>
<FIELD1>VALUE1</FIELD1>
<FIELD3>VALUE3</FIELD3>
</TOPLEVEL>
ИЗМЕНИТЬ:
Следуя совету @sine и @gunr2171, я пошел по пути отказа от добавления пустых/нулевых узлов.
Поскольку я хотел сохранить все во вложенном новом формате (без большого количества ветвей if/then), я попытался использовать проверку с тремя условиями для нулевого значения. Интересно, что XElement не оставляет артефактов, если вы передаете null как содержимое чего-либо.
Итак, это сделало трюк:
string missing = null;
XElement missingNodes = new XElement("TOPLEVEL",
new XElement("FIELD1", "VALUE1"),
(missing != null ) ? new XElement("FIELD2", missing) : null,
new XElement("FIELD3", "VALUE3")
);
XElement.Add
для добавления дочерних элементов вместо конструктора. - person gunr2171   schedule 06.03.2013