According to W3C standards, if you have a nillable element with a nil value, you are supposed to format it like this:
<myNillableElement xsi:nil="true" />
But if you use this LinqToXml statement…
element.Add(
new XElement(ns + "myNillableElement", null);
…the resulting XML is…
<myNillableElement />
…which is invalid. And not just invalid according to W3C, invalid according to Microsoft’s own XML/XSD validator. So, next time you validate your XML, you get errors.
Am I missing some switch that can turn on correct handling of nillable elements?
Thanks.
LINQ to XML is mostly not schema-aware – it lets you validate the tree, but it doesn’t derive any particular semantics from that. Your mistake is believing that
nullshould somehow always map toxsi:nil. There’s no such requirement in W3C specs (rather obviously, because they do not cover any kinds of language bindings).In particular,
XElementconstructor that you call actually takes an argument of typeobject[], which is a list of children – there’s no reason why passingnullto that should have any relevance toxsi:nil. In any case, how is LINQ to XML supposed to know that you’re producing XML that is valid according to some schema, and that one particular element in this schema hasnilled="true"?