Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
554 views
in Technique[技术] by (71.8m points)

c# - LinqToXml does not handle nillable elements as expected

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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 null should somehow always map to xsi:nil. There's no such requirement in W3C specs (rather obviously, because they do not cover any kinds of language bindings).

In particular, XElement constructor that you call actually takes an argument of type object[], which is a list of children - there's no reason why passing null to that should have any relevance to xsi: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 has nilled="true"?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...