Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для GarZa
12 / 12 / 1
Регистрация: 23.03.2014
Сообщений: 86
.NET 4.x

Не соблюдается иерархия в XML

25.03.2014, 13:48. Показов 1713. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем.

Код, создающий первый блок:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
XDocument ObjectLinkDoc = new XDocument(
                               new XElement("objectlink", new XAttribute("codelink", "0"),
                                    new XElement("source", "null"),
                                    new XElement("sourcenum", "null"),
                                    new XElement("type", "null"),
                                    new XElement("height", "null"),
                                    new XElement("width", "null"),
                                    new XElement("length", "null"),
                                    new XElement("vgvs", "null"),
                                    new XElement("volumegvs", "null"),
                                    new XElement("x1", "null"),
                                    new XElement("y1", "null"),
                                    new XElement("x2", "null"),
                                    new XElement("y2", "null"),
                                    new XElement("groupsource", "null"),
                                    new XElement("koefrelief", "null")));
                       ObjectLinkDoc.Save(FullNameFileLink.Value);
По ходу идет дозапись в этот же документ:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
XElement objectlink = new XElement("objectlink",
                    new XAttribute("codelink", nextcodelink),
                    new XElement("source", sourceto),
                    new XElement("sourcenum", sourcenumto),
                    new XElement("type", typeto),
                    new XElement("heigth", heigthto),
                    new XElement("width", widthto),
                    new XElement("length", lengthto),
                    new XElement("vgvs", vgvsto),
                    new XElement("volumegvs", volumegvsto),
                    new XElement("x1", x1to),
                    new XElement("y1", y1to),
                    new XElement("x2", x2to),
                    new XElement("y2", y2to),
                    new XElement("groupsource", groupsourceto),
                    new XElement("koefrelief", koefreliefto));
                FileLinkDoc.Root.Add(objectlink);
                FileLinkDoc.Save(FullNameFileLink);

На выходе ожидается быть так:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<objectlink codelink="0">
  <source>null</source>
  <sourcenum>null</sourcenum>
  <type>null</type>
  <height>null</height>
  <width>null</width>
  <length>null</length>
  <vgvs>null</vgvs>
  <volumegvs>null</volumegvs>
  <x1>null</x1>
  <y1>null</y1>
  <x2>null</x2>
  <y2>null</y2>
  <groupsource>null</groupsource>
  <koefrelief>null</koefrelief>
</objectlink>
  <objectlink codelink="1">
    <source></source>
    <sourcenum></sourcenum>
    <type></type>
    <heigth></heigth>
    <width></width>
    <length></length>
    <vgvs></vgvs>
    <volumegvs></volumegvs>
    <x1></x1>
    <y1></y1>
    <x2></x2>
    <y2></y2>
    <groupsource></groupsource>
    <koefrelief></koefrelief>
  </objectlink>
а получается так:

XML
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
<?xml version="1.0" encoding="utf-8"?>
<objectlink codelink="0">
  <source>null</source>
  <sourcenum>null</sourcenum>
  <type>null</type>
  <height>null</height>
  <width>null</width>
  <length>null</length>
  <vgvs>null</vgvs>
  <volumegvs>null</volumegvs>
  <x1>null</x1>
  <y1>null</y1>
  <x2>null</x2>
  <y2>null</y2>
  <groupsource>null</groupsource>
  <koefrelief>null</koefrelief>
  <objectlink codelink="1">
    <source></source>
    <sourcenum></sourcenum>
    <type></type>
    <heigth></heigth>
    <width></width>
    <length></length>
    <vgvs></vgvs>
    <volumegvs></volumegvs>
    <x1></x1>
    <y1></y1>
    <x2></x2>
    <y2></y2>
    <groupsource></groupsource>
    <koefrelief></koefrelief>
  </objectlink>
</objectlink>
То есть блоки, которые добавляются, попадают почему-то во внутрь первого нулевого блока. Только стал использовать Linq, подскажите, пожалуйста..
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2014, 13:48
Ответы с готовыми решениями:

DataGridView1 не соблюдается условие заполения
Это окно редактирования документа в новой форме. Когда нажимаешь на button1, должна заполнится dataGridView1 согласно тому номеру который...

Не соблюдается условие в Word VBA
Всем здравствуйте. У меня такая проблема, переменная kolP1 подсчитывает параграфы в документе, nP1-ввод номера параграфа, отсюда казалось...

Условие не соблюдается. выводит if в любом случае
вот код. что я делаю не так? на условие не обращайте внимания, я только учусь. суть в том, что он в любом случае пишет &quot;вы ввели...

13
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.03.2014, 13:54
Вы добавляете в Root, а после первой записи Root'ом является как раз-таки
XML
1
<objectlink codelink="0">
. Создайте Root элемент, например, objectlinks и добавляйте в него.
0
 Аватар для GarZa
12 / 12 / 1
Регистрация: 23.03.2014
Сообщений: 86
25.03.2014, 14:12  [ТС]
может я вас не совсем верно понял, но не выйдет - все блоки должны быть абсолютно одинаковыми, включая нулевой...разница только в номере codelink.. ну и в содержимом елементов...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.03.2014, 14:16
Попробуйте в начале написать:
C#
1
2
3
var root = FileLinkDoc.Root
if (root == null)
   throw new NullReferenceException("root");
...
а ниже уже ваш код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
XElement objectlink = new XElement("objectlink",
                    new XAttribute("codelink", nextcodelink),
                    new XElement("source", sourceto),
                    new XElement("sourcenum", sourcenumto),
                    new XElement("type", typeto),
                    new XElement("heigth", heigthto),
                    new XElement("width", widthto),
                    new XElement("length", lengthto),
                    new XElement("vgvs", vgvsto),
                    new XElement("volumegvs", volumegvsto),
                    new XElement("x1", x1to),
                    new XElement("y1", y1to),
                    new XElement("x2", x2to),
                    new XElement("y2", y2to),
                    new XElement("groupsource", groupsourceto),
                    new XElement("koefrelief", koefreliefto));
                root.Add(objectlink);
и только после цикла
C#
1
FileLinkDoc.Save(FullNameFileLink);
Добавлено через 35 секунд
GarZa, дело в том, что у вас нету корневого элемента. У вас невалидный XML, вот он и тупит на нем.
1
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
25.03.2014, 14:16
GarZa, насколько я могу судить. сделать так, как вы хотите, таким образом не получится. У документ обязательно должен быть корневой элемент, и он должен быть только один. а вы хотите, чтобы у вас было n-ное количество корневых объектов. Как вариант решения могу предложить вложить элементы objectlink в другой элемент, назвав его, например, objectlinks.
з.ы. если в чем-то ошибся, поправьте пожалуйста
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.03.2014, 14:19
Вы неверно понимаете структуру xml. Корневой элемент может быть только один. Все блоки у вас будут одинаковыми, только если их много, это уже коллекция:
XML
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<objectlinks>
    <objectlink codelink="0" />
    <objectlink codelink="1" />
</objectlinks>
А в случае с тем, что Вы хотите сделать, любой валидатор свалится на ошибке "There are multiple root elements".
0
 Аватар для GarZa
12 / 12 / 1
Регистрация: 23.03.2014
Сообщений: 86
25.03.2014, 14:20  [ТС]
Psilon, тоже самое...

я выкрутился - root-м обвернул все содержимое документа, в внутри уже пишу как мне надо... но костыли...может все-таки что-то можно сделать еще?
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.03.2014, 14:21
Лучший ответ Сообщение было отмечено GarZa как решение

Решение

GarZa, это не костыли, это соблюдение принципа единственного корневого элемента >_<
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.03.2014, 14:22
Цитата Сообщение от GarZa Посмотреть сообщение
но костыли...может все-таки что-то можно сделать еще?
Можно отказаться от структуры XML, если она не удовлетворяет Вашим требованиям, например.
0
 Аватар для GarZa
12 / 12 / 1
Регистрация: 23.03.2014
Сообщений: 86
25.03.2014, 14:26  [ТС]
valera_21, TheSpawn, спорить не буду - у меня знаний меньше вашего.. но это прекрасно получалось в классическом XmlElement. Могу код привести, если надо Не думаю, что в Linq этого нельзя сделать...

Добавлено через 3 минуты
а насчет структуры xml, его воротить можно как задумается по идее...нет, разве? решать программисту, как связывать между собой элементы и аттрибуты...ну может я неправильно жил все это время..хз..
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
25.03.2014, 14:29
Цитата Сообщение от GarZa Посмотреть сообщение
а насчет структуры xml, его воротить можно как задумается по идее...нет, разве? решать программисту, как связывать между собой элементы и аттрибуты...ну может я неправильно жил все это время..хз..
Как только нарушается схема, оно ничем не отличается от текстового файлика. Воротить-то можно, но ни одна уважающая формат программа работать с ним уже не будет.
0
 Аватар для GarZa
12 / 12 / 1
Регистрация: 23.03.2014
Сообщений: 86
25.03.2014, 14:36  [ТС]
TheSpawn, ну если с позиций экспорта, спору нет...

root-м сделал head
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.03.2014, 18:55
GarZa, рутом можно сделать элемент с именем root
0
 Аватар для GarZa
12 / 12 / 1
Регистрация: 23.03.2014
Сообщений: 86
25.03.2014, 19:13  [ТС]
Psilon, не хочу root... head как-то...нативнее)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2014, 19:13
Помогаю со студенческими работами здесь

Лабораторная. Соблюдается ли баланс мощностей в схеме?
Сделал лаб. работу и нужно ответить на вопрос, соблюдается ли баланс мощностей в схеме?? за кривой график извиняйте, на скорую руку делал...

Проверить, соблюдается ли равенство открывающихся и закрывающихся скобок
Всем добрый день) вот такая задача привела меня в ступор: &quot;Проверить, соблюдается ли равен¬ство открывающихся и закрывающихся...

Вывести строки из структуры, в которых одновременно соблюдается равенство
Здравствуйте , следующий вопрос : как вывести строки из структуры , в которых одновременно соблюдается равенство rang==rangs ;...

Вывести семестры и их специальности в которых соблюдается условие - 5 зачетов и 3 экзамена
Здравствуйте! Имеется БД с такой таблицей: CREATE TABLE Discipline( ID_dis INT IDENTITY(1,1) NOT NULL, --ID_Дисциплины ...

Ко всем файлам добавилось .xml, теперь они в формате ***.xls.XML, ***doc.XML (изначально в Word и Excel)
при копировании с одного ноутбука на другом (изначально на новом не было офиса, м.б. из-за этого файлы так перенаименовались) они появились...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru