c# - LinqToXml 未按预期处理可空元素

标签 c# xml xsd schema linq-to-xml

根据 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/

相关文章:

C# linq to xml,带属性的嵌套查询

java - 从 xsd 生成 jaxb 对象时如何使用类自定义来解决冲突

javascript - 在Javascript中获取XML节点的textContent

c# - 在 Armstrong 中为 List 或 Array 赋值时遇到问题 No

c# - 在 Xamarin Forms 中找不到具有正确签名类型的方法

c# - 为什么 PartialView 一直在调用自己?

xml - XML 中的 &lt;![CDATA[]]> 是什么意思?

c# - 从 C# 类代码生成 xsd 注释和文档标记

xml - 从模式生成代码时删除中间类

c# - Winforms 组件的父/所有者