2015-08-12 2 views
2

В настоящее время я работаю над приложением импорта данных на VS2012, которое берет XML-данные и импортирует их в базу данных. У меня есть xsd-схема, с которой должен соответствовать xml-документ.Работа с нулевыми элементами в xml

Внутри моего xsd я определил <Loan>, чтобы иметь minOccurs=0, что, очевидно, означает, что элемент Loan не должен быть установлен.

Теперь, когда я работаю с моими фиктивными данными и не помещаю (и это другие элементы внутри), он возвращается ко мне с ошибкой, говорящей, что значение не может быть нулевым. Я проследил это обратно к моей C# код и обнаружил, что линия его терпел неудачу на было:

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

Даже если у меня есть MinOccurs установлено в 0, то элемент займа по-прежнему не допускает пустых значений.

В любом случае, убедитесь, что при отсутствии элемента <Loan> код выше возвращает 0, а не Null.

FIXED! ОТВЕТ - ПРИНИМАЕМЫЙ ОТВЕТ

ответ

1

Ваша проблема не имеет ничего общего с XML или вашим элементом Loan как таковой. Похоже, вы используете метод расширения Linq Enumerable.Count<TSource>(this IEnumerable<TSource> source) для подсчета количества кредитов. This method намеренно выбрасывает ArgumentNullException, если входная последовательность равна нулю. (Я считаю, все Linq extension methods бросок на нулевой вход перечислимого.) Чтобы обойти эту проблему, вы можете сделать свой собственный метод расширения для замены Count(), или просто сделать

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

Жениться на мне? Нах, но серьезно, просто изменив эту строку кода, исправил ее. Большое вам спасибо haha ​​ –

+0

, а также хорошо объяснил, теперь я знаю, почему он выбрасывал исключение и как count() фактически работает :) –

0

MinOccurs = 0 означает, что вы должны пройти ценность. Это значение может или не может позволить Null; в зависимости от того, что элементы неровной настройки. Это может быть законно «MinOccurs = 0» и «Nillable = false», что означает, что вам не нужно передавать значение, но если вы это сделаете, это не может быть Nil. Если у вас есть значение Null, и вам нужно соблюдать XSD, просто не передавайте значение.

Смежные вопросы