Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Lenoshka
38 / 38 / 3
Регистрация: 22.02.2013
Сообщений: 117
Записей в блоге: 2
1

Ошибка при разборе XML. Ссылка на объект не указывает на экземпляр объекта

30.12.2013, 12:17. Просмотров 1637. Ответов 4
Метки нет (Все метки)

Добрый день! Столкнулась со следующей проблемой:
разбираю xml сообщение следующего вида:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<settings>
- <row>
  <ColumnName>ACC_IN</ColumnName> 
  <ColumnWidth>50</ColumnWidth> 
  <ColumnVisible>1</ColumnVisible> 
  <ColumnOrder>0</ColumnOrder> 
  </row>
- <row>
  <ColumnName>SUMMA</ColumnName> 
  <ColumnWidth>100</ColumnWidth> 
  <ColumnVisible>1</ColumnVisible> 
  <ColumnOrder>1</ColumnOrder> 
  </row>
</settings>
На первой же строке дочернего элемента row получаю ошибку: "Ссылка на объект не указывает на экземпляр объекта.", хотя значения у элемента есть. На рисунке это видно и код тоже.
Что я делаю не так? Спасбио большое!
0
Миниатюры
Ошибка при разборе XML. Ссылка на объект не указывает на экземпляр объекта  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 12:17
Ответы с готовыми решениями:

XML и префиксы, получение тега и ошибка "Ссылка на объект не указывает на экземпляр объекта"
Ребята помогите разобраться , хочу получить значение тега organization . ...

Исключение "ссылка на объект не указывает на экземпляр объекта" при работе с XML
Вообще есть проблемка, выдаёт ошибку при компиляции: ссылка на объект не...

Удаление из XML фаила Node: Ссылка на объект не указывает на экземпляр объекта
Помогите устранить ошибку &quot;Ссылка на объект не указывает на экземпляр объекта.&quot;...

Ошибка: ссылка на объект не указывает на экземпляр объекта
K-means кластеризация изображения private void...

Ошибка: ссылка на объект не указывает на экземпляр объекта
Ошибка:ссылка на объект не указывает на экземпляр объекта вот код: int...

4
Петррр
6163 / 3464 / 897
Регистрация: 28.10.2010
Сообщений: 5,928
30.12.2013, 12:29 2
Выложите код текстом, а не картинкой.

Добавлено через 6 минут
И да, пора завязывать работать с "голым" XML, используйте десериализацию
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Xml.Serialization;
 
namespace Ghost
{
    public class Row
    {
        [XmlElement("ColumnName")]
        public string Name { get; set; }
 
        [XmlElement("ColumnWidth")]
        public int Width { get; set; }
 
        [XmlElement("ColumnVisible")]
        public int Visible { get; set; }
 
        [XmlElement("ColumnOrder")]
        public int Order { get; set; }
    }
 
    [XmlRoot("settings")]
    public class Settings
    {
        [XmlElement("row")]
        public List<Row> Rows { get; set; }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            string rawXml = @"<settings>
<row>
  <ColumnName>ACC_IN</ColumnName> 
  <ColumnWidth>50</ColumnWidth> 
  <ColumnVisible>1</ColumnVisible> 
  <ColumnOrder>0</ColumnOrder> 
</row>
<row>
  <ColumnName>SUMMA</ColumnName> 
  <ColumnWidth>100</ColumnWidth> 
  <ColumnVisible>1</ColumnVisible> 
  <ColumnOrder>1</ColumnOrder> 
</row>
</settings>";
            XmlSerializer serializer = new XmlSerializer(typeof(Settings));
            Settings settings = (Settings)serializer.Deserialize(new StringReader(rawXml));
            Debug.Assert(settings.Rows.Count == 2);
            Debug.Assert(settings.Rows[0].Name == "ACC_IN");
        }
    }
}
1
Lenoshka
38 / 38 / 3
Регистрация: 22.02.2013
Сообщений: 117
Записей в блоге: 2
30.12.2013, 12:40  [ТС] 3
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//получаю строку из процедуры
xml = (string)commLoad.Parameters["@xmlDoc"].Value;
                    doc.LoadXml(xml);
 
                    string ColumnName=String.Empty;
                    int ColumnWidthe;
                    bool ColumnVisible;
                    int ColumnOrder; 
 
                    //получаю все элементы с параметрами
                    XmlNodeList rowList = doc.DocumentElement.ChildNodes;
                    foreach (XmlNode row in rowList)
                    {
//разбираю элемент с параметрами по отдельным компонентом
                        XmlNodeList param = row.ChildNodes;
                        foreach (XmlNode parameter in param)
                        {
                            ColumnName = parameter["ColumnName"].InnerText;
                            ColumnWidthe = Convert.ToInt16(parameter["ColumnWidth"].InnerText);
                            ColumnVisible = Convert.ToBoolean(parameter["ColumnVisible"].InnerText);
                            ColumnOrder = Convert.ToInt16(parameter["ColumnOrder"].InnerText);
 
//далее присваивание
                            for (int i = 0; i < 8; i++)
                            {
                                if (String.Compare(dgvSelect.Columns[i].Name, ColumnName, true) == 0)
                                {
                                    if (ColumnWidthe < 0)
                                    {
                                        dgvSelect.Columns[i].Width = dgvSelect.Columns[i].MinimumWidth;
                                    }
                                    else
                                    {
                                        dgvSelect.Columns[i].Width = ColumnWidthe;
                                    }
                                }
 
                                if (ColumnOrder < 0)
                                {
                                    dgvSelect.Columns[i].DisplayIndex = dgvSelect.Columns[i].Index;
                                }
                                else
                                {
 
                                    dgvSelect.Columns[i].DisplayIndex = ColumnOrder;
                                }
 
                                dgvSelect.Columns[i].Visible = ColumnVisible;
 
                                clbColumns.SetItemChecked(i, ColumnVisible);
                            }
                        }
                    }
PS. Чтобы было понятнее: в xml передаются данные для столбцов в гриде
0
Петррр
6163 / 3464 / 897
Регистрация: 28.10.2010
Сообщений: 5,928
30.12.2013, 12:50 4
C#
1
2
3
4
5
6
7
8
XmlNodeList rowList = doc.DocumentElement.ChildNodes;
foreach (XmlNode row in rowList)
{
    ColumnName = row["ColumnName"].InnerText;
    ColumnWidthe = Convert.ToInt16(row["ColumnWidth"].InnerText);
    ColumnVisible = Convert.ToBoolean(Convert.ToInt32(row["ColumnVisible"].InnerText));
    ColumnOrder = Convert.ToInt16(row["ColumnOrder"].InnerText);                
}
1
Lenoshka
38 / 38 / 3
Регистрация: 22.02.2013
Сообщений: 117
Записей в блоге: 2
30.12.2013, 13:29  [ТС] 5
щас посмотрю. Спасибо!
0
30.12.2013, 13:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2013, 13:29

Ошибка ссылка на объект не указывает на экземпляр объекта
Здравствуйте все, нуждаюсь в вашей помощи. Есть код, который почему то не...

Ошибка Ссылка на объект не указывает на экземпляр объекта
Помогите пожалуйтса понять в чем ошибка! bool invert=false; if...

Ошибка: Ссылка на объект не указывает на экземпляр объекта
Ссылка на объект не указывает на экземпляр объекта. using HtmlAgilityPack;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru