根据 W3C 标准,如果您有一个值为 nil 的可空元素,则应该将其格式化如下:
<myNillableElement xsi:nil="true" />
但是如果您使用此 LinqToXml 语句...
element.Add(
new XElement(ns + "myNillableElement", null);
...生成的 XML 是...
<myNillableElement />
...这是无效的。不仅根据 W3C 无效,根据 Microsoft 自己的 XML/XSD 验证器无效。因此,下次验证 XML 时,您会收到错误。
我是否缺少一些可以正确处理可为空元素的开关?
谢谢。
最佳答案
LINQ to XML 基本上不支持架构 - 它允许您验证树,但它不会从中派生任何特定的语义。您的错误是认为 null
应该以某种方式始终映射到 xsi:nil
。 W3C 规范中没有这样的要求(很明显,因为它们不涵盖任何类型的语言绑定(bind))。
特别是,您调用的 XElement
构造函数实际上采用 object[]
类型的参数,它是子级列表 - 没有理由传递 null
应该与 xsi:nil
相关。无论如何,LINQ to XML 如何知道您正在生成根据某种架构有效的 XML,并且该架构中的一个特定元素具有 nilled="true"
?
关于c# - LinqToXml 未按预期处理可空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364917/