Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319

Удаление одинаковых элементов в xml

21.04.2020, 16:40. Показов 2579. Ответов 6

Студворк — интернет-сервис помощи студентам
Привет!!!
У меня после создания xml создаются не нужные элементы .
Должно быть так:
XML
1
2
3
4
5
6
7
8
9
10
<xml>
    <state>
        <background file ="bg0.png"/>
        <arrow action="320" file="arr0.png"/>
    </state>
    <state>
        <background file ="bg1.png"/>
        <arrow action="321" file="arr1.png"/>
    </state>
</xml>
А получается так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<xml>
    <state>
        <background file ="bg0.png"/>
        <arrow action="320" file="arr0.png"/>
    </state>
    <state>
        <background file ="bg0.png"/>
        <arrow action="320" file="arr0.png"/>
    </state>
    <state>
        <background file ="bg1.png"/>
        <arrow action="321" file="arr1.png"/>
    </state>
</xml>
Как можно удалять ненужные элементы?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2020, 16:40
Ответы с готовыми решениями:

Удаление одинаковых элементов массива в DataGridView
ЗДраствуйте форумчани! Возникла небольшая проблема мне нужно написать метод для удаления одинаковых элементов , главное что это в...

Чтение атрибута из одинаковых элементов XML файла
Есть xml мне необходимо его прочитать. У меня получается получить атрибут определенного элемента. Проблема в том, что если у меня два...

Удаление одинаковых элементов из списка
Доброго времени суток! Помогите пожалуйста! Есть структура: public struct person{ public string Name; ...

6
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
22.04.2020, 00:11
Лучший ответ Сообщение было отмечено SAn4Es_2005 как решение

Решение

Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
Как можно удалять ненужные элементы?
Первый вопрос, которым следовало бы задаться - это почему они создаются и есть ли возможность устранить проблему.
В общем и целом, если под ненужными понимаются повторы, то удалить можно дистинктом, правда логику сравнения узлов придется реализовать самому. Если узлы в точности совпадают вплоть до порядка расположения атрибутов и пробельных литер, то можно так
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
 
namespace DistinctXml
{
    class Program
    {
        static void Main(string[] args)
        {
            var doc = XDocument.Parse(code);
            var content = doc.Root.Elements(XName.Get("state")).Distinct(new XElementComparer());
            doc.Root.ReplaceAll(content);
            doc.Save(Console.Out);
            Console.ReadKey();
        }
 
        static string code = $@"<root>
    <state>
        <background file=""bg0.png""/>
        <arrow action =""320"" file=""arr0.png""/>
    </state>
    <state>
        <background file=""bg0.png"" />
        <arrow action=""320"" file=""arr0.png""/>
    </state>
    <state>
        <background file=""bg1.png"" />
        <arrow action=""321"" file=""arr1.png""/>
    </state>
</root>";
 
        internal class XElementComparer : IEqualityComparer<XElement>
        {
            public bool Equals(XElement x, XElement y)
            {
                return XNode.DeepEquals(x,y);
            }
 
            public int GetHashCode(XElement obj)
            {
                return obj.ToString().GetHashCode();
            }
        }
    }
}
В ином случае логику сравнения придется реализовывать в зависимости от задачи.
1
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
22.04.2020, 07:34  [ТС]
А если у меня будет изменятся xml?
Я делаю редактор.

Добавлено через 3 минуты
В редакторе ты типа добавляешь элементы на поле.
И при нажатии на кнопку "сохранить" характеристики элементов сохраняются в xml
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
22.04.2020, 08:47
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
А если у меня будет изменятся xml?
Если в твоей программе нет модуля, который читает мысли (твои или пользователя), то, по всей видимости, ему придется явно объяснить, по каким критериям следует считать узлы эквивалентными. В моем примере сравнение производилось на основе логики заложенной в XNode.DeepEquals, ты можешь реализовать метод Equals так, как тебе захочется и именно на основе этой реализации будет действовать метод Distinct(емнип, GetHashCode он не использует, так что его можно не трогать).
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
22.04.2020, 09:25  [ТС]
А можно сделать так, чтобы программа открывала xml, проверяла есть ли одинаковые элементы, и если есть, то удаляла их.



У меня в редакторе записывается в xml то, что указал пользователь.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
22.04.2020, 09:31
Хотя насчет хэшкода - был неправ, он тоже для "одинаковых" элементов должен возвращать одно значение. Но тут, чтобы не заморачиваться, можно пойти на хитрость, и сделать так, чтобы он вообще всегда возвращал одно и то же. В этом случае логика будет основываться на Equals. Ну, по крайней мере, когда я написал, чтобы хэшкод всегда возвращал 1, логика не изменилась, и узел удалился, а когда он стал возвращать рандомное значение, то до выполнения Equals дело не дошло. Так что вот, исходя из этого реализуй свою логику сравнения.

Добавлено через 1 минуту
Цитата Сообщение от SAn4Es_2005 Посмотреть сообщение
проверяла есть ли одинаковые элементы, и если есть, то удаляла их.
Ну я уже несколько раз повторил, что понятие "одинаковые элементы" - очень расплывчато. Мой пример вполне удаляет одинаковые элементы, но внеси в них небольшие изменения и он уже не будет их идентифицировать как одинаковые.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 319
22.04.2020, 10:08  [ТС]
А можно вместо code поставить документ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2020, 10:08
Помогаю со студенческими работами здесь

Нахождение одинаковых элементов и их удаление
Дан массив целых чисел (n=10), заполненный случайным образом числа-ми из промежутка . 1. Удалить из него все элементы, которые со¬стоят из...

Удаление одинаковых элементов
&lt;HTML&gt; &lt;FORM &lt;b&gt;Введите текст для сортировки: &lt;TEXTAREA ROWS=6 COLS=40 id=&quot;oknovvoda1&quot;&gt; &lt;/TEXTAREA&gt; &lt;INPUT TYPE...

Удаление одинаковых элементов из массива
Помогите пожалуйста ! Нужно удалить повторяющиеся элементы . Например : {1, 1, 1, 1, 2, 2, 4,4, 5} Должно вывести : 1 2 4 5 ! Очень нужна...

Удаление из массивов одинаковых элементов
Есть два массива , к примеру Array ( =&gt; Array ( =&gt; /css/main.css =&gt; main.css ...

Удаление одинаковых элементов в массиве
Помогите пожалуста разобраться с кодом. Дан массив из 23х произвольных элементов, нужно удалить все одинаковые элементы в этом массиве....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru