在 xml 中处理空元素

Working with null elements in an xml

我目前正在 VS2012 上开发数据导入应用程序,它获取 XML 数据并将其导入数据库。我有一套 xsd 模式,xml 文档必须与之匹配。

在我的 xsd 中,我将 <Loan> 定义为具有 minOccurs=0,这显然意味着不必设置 Loan 元素。

现在,当我处理我的虚拟数据并输入 no(以及里面的其他元素)时,它 returns 给我一个错误,说值不能为空。我将其追溯到我的 C# 代码,发现失败的行是:

int loan_count = fam.Family[i].Loan.Count();

即使我将 minOccurs 设置为 0,Loan 元素仍然不允许空值。

有没有办法保证在没有<Loan>元素的时候,上面的代码returns0,不是Null。

已修复!答案是已接受的答案

您的问题与 XML 或您的 Loan 元素本身无关。您似乎正在使用 Linq 扩展方法 Enumerable.Count<TSource>(this IEnumerable<TSource> source) to count the number of loans. This method intentionally throws an ArgumentNullException if the input sequence is null. (I believe all Linq extension methods 抛出可枚举的空输入。)要解决此问题,您可以创建自己的扩展方法来替换 Count(),或者直接执行

int loan_count = (fam.Family[i].Loan == null ? 0 : fam.Family[i].Loan.Count());

MinOccurs=0 表示您必须传递一个值。该值可能允许也可能不允许 Null;取决于该元素可空设置。它可以合法地是 "MinOccurs=0" 和 "Nillable=false" 这意味着你不必传递一个值,但如果你这样做,它不能是 Nil。如果您有 Null 值,并且需要遵守 XSD,请不要传递该值。