#c# #xml #autocomplete #windows-phone #autocompletebox
#c# #xml #автозаполнение #windows-phone #автозаполнение
Вопрос:
У меня есть XML-файл, и я хочу выполнить поиск в нем с помощью поля автозаполнения. Я использую приведенный ниже код, но он разбился. Как я могу это исправить или есть способ лучше?
XDocument loadedData = XDocument.Load("BankCode.xml");
var data = from query in loadedData.Descendants("BankCode")
select new BankData
{
BankName= (string)query.Element("Bank"),
};
this.acBox.ItemsSource = data;
XDocument loadedCustomData = XDocument.Load("BankCode.xml");
var filteredData = from c in loadedCustomData.Descendants("Bank")
where c.Attribute("Code").Value == acBox.Text
select new BankData()
{
Code= c.Attribute("Code").Value
};
listBox1.ItemsSource = filteredData;
Я хочу создать приложение, в котором, когда пользователь вводит название банка в поле автозаполнения после нажатия кнопки поиска, ему отображается код банка. (!!acBox — это поле автозаполнения.)
Комментарии:
1. Пожалуйста, объясните «сбой». Есть ли исключение? Кроме того, вам нужно будет показать некоторую разметку из ‘BankCode.xml «…
2. Когда я использую банк из поля автозаполнения и нажимаю кнопку поиска, он разбился, и отладчик показывает этот код как ошибку: ‘где c.Атрибут («Код»). Значение == acBox. Текст’ и говорит, что исключение типа ‘System.NullReferenceException’ произошло в DatabindingAutoCompleteBox.DLL но не был обработан в пользовательском коде Дополнительная информация: ссылка на объект не установлена для экземпляра объекта.
3. попробуйте добавить нулевую проверку ?
where c.Attribute("Code") != null amp;amp; c.Attribute("Code").Value == acBox.Text
. NRE, похоже, означает, чтоc.Attribute("Code")
это значение равно нулю…
Ответ №1:
Кажется, у 1 из ваших Bank
узлов нет Code
атрибута. Вы должны добавить нулевую проверку:
var filteredData = from c in loadedCustomData.Descendants("Bank")
where c.Attribute("Code") != null amp;amp; c.Attribute("Code").Value == acBox.Text
select new BankData()
{
Code= c.Attribute("Code").Value
};