在xml中使用null元素

时间:2015-08-12 21:21:15

标签: c# xml xsd

我目前正致力于VS2012上的数据导入应用程序,该应用程序获取XML数据并将其导入数据库。我有一个xsd架构,xml文档必须匹配。

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

现在,当我正在使用我的虚拟数据并且没有(并且它的内部有其他元素)时,它返回给我一个错误,表示值不能为空。我将其追溯到我的C#代码,发现它失败的行是:

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

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

无论如何确保当没有<Loan>元素时,上面的代码返回0,而不是Null。

固定!答案是接受的答案

2 个答案:

答案 0 :(得分:1)

您的问题与XML或您的Loan元素本身无关。您似乎使用Linq扩展方法Enumerable.Count<TSource>(this IEnumerable<TSource> source)来计算贷款数量。如果输入序列为空,This method会故意抛出ArgumentNullException。 (我相信所有 Linq extension methods会抛出一个可输入的null输入。)要解决这个问题,你可以自己做一个扩展方法来替换Count(),或者只做

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

答案 1 :(得分:0)

MinOccurs = 0表示您必须传递一个值。该值可能会或可能不会允许Null;取决于那些元素的可用设置。它可以合理地是&#34; MinOccurs = 0&#34;和&#34; Nillable = false&#34;这意味着你不必传递一个值,但如果你这样做,它就不能是Nil。如果您有Null值,并且您需要遵守XSD,则不要传递该值。