Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

[XML] Как отсортировать данные в XML?

24.01.2016, 17:22. Показов 2761. Ответов 2
Метки нет (Все метки)

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

В ранее созданой теме приводил пример .xml файла. Подскажите если мне нужно отсортировать такой хмл по File или Date, т.е. чтобы либо по алфавиту\имени, либо по дате добавления. С помощью каких команд это можно сделать или есть ли решения?
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="windows-1251"?>
<DATA BaseDate="2016.01.11">
 <EXTENSION>
  <ITEM File=".bat" Date="2010" Notice="" Descr=""/>
  <ITEM File=".cmd" Date="2008" Notice="" Descr=""/>
  <ITEM File=".com" Date="2011" Notice="" Descr=""/>
  <ITEM File=".jse" Date="2012" Notice="" Descr=""/>
  <ITEM File=".tmp" Date="2009" Notice="" Descr=""/>
  <ITEM File=".tmpfs" Date="2010" Notice="" Descr=""/>
  <ITEM File=".vbe" Date="2014" Notice="" Descr=""/>
  <ITEM File=".vbs" Date="2013" Notice="" Descr=""/>
  <ITEM File=".jgp" Date="dd.mm.yyyy" Notice="Расширение свойственно файлам" Descr=""/>
 </EXTENSION>
</DATA>
У меня кроме как получить значение атрибута по индексу: i и i + 1, сравнить их(пузырьковая сортировка), получить через GetXML() всю строку и переставить строки с помощью String'овской Exchange мысли другой нет.

Буду признателен за помощь. Спасибо.
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2016, 17:22
Ответы с готовыми решениями:

[XML] - Как правильно сохранить XML с уровнями и отступами?
Приветы всем. Подскажите как правильно сохранить файл .xml чтобы сохранились отступы в уровнях и узлах? Есть такой простенький для...

Как правильно считать данные в .xml файле?
Приветствую всех. Вопрос такой, есть логи утилиты AVZ, пример таких логов можете найти в разделе лечения. Меня интересует файл .xml...

Как обновить данные в файле xml на основе другого xml?
Добрый день! Мне необходимо разработать XSLT преобразование, которое будет обновлять данные в файле formats.xml (узлы name, shortName,...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
24.01.2016, 17:54
Лучший ответ Сообщение было отмечено Maestro как решение

Решение

Я бы работал с XML-ом как с обычным текстовым файлом в данном случае: выбрал все ITEM-ы в StringList (это просто, если отTrim-ленная строка начинается с <ITEM, то это - то, что нужно), вызвал бы для этого списка строк CustomSort, упорядочивая строки так, как нужно, а потом "обернул" бы полученный упорядоченный набор ITEM-ов "шапкой" и "подвалом". Вот тебе и упорядоченный 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
String Parse(String s, String value)
{
    int p = s.Pos(value);
    return s.SubString(p + value.Length(),
        PosEx("\"", s, p + value.Length() + 1) - p - value.Length());
}
 
// SortByData будет выглядеть также, за исключением второго параметра, передаваемого в Parse
int __fastcall SortByFile(TStringList* L, int i1, int i2)
{
    return CompareStr(Parse(L->Strings[i1], "File=\""), Parse(L->Strings[i2], "File=\""));
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::auto_ptr<TStringList> xml(new TStringList);
    xml->LoadFromFile(ExtractFilePath(ParamStr(0)) + "\\files\\xml.xml");
 
    String strHead = "", strFoot = "";
    bool is_header = true;
    std::auto_ptr<TStringList> part(new TStringList);
    for (int i = 0; i < xml->Count; i++)
    {
        String s = xml->Strings[i].Trim();
        if (xml->Strings[i].Trim().Pos("<ITEM") == 1)
        {
            is_header = false;
            part->Add(xml->Strings[i]);
        }
        else
            (is_header ? strHead : strFoot) += xml->Strings[i] + "\r\n";
    }
    part->CustomSort(SortByFile);
    part->Insert(0, strHead.Trim());
    part->Add(strFoot.Trim());
    // Сохраняем содержимое part
}
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
24.01.2016, 20:06  [ТС]
Спасибо, проверю, отпишусь завтра или послезавтра.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2016, 20:06
Помогаю со студенческими работами здесь

Как добавить данные в xml-файл, используя пространство имен System.Xml.Linq
Допустим, есть файл xml, я его взял из этого треда: https://www.cyberforum.ru/vb-net/thread335207.html &lt;?xml version=&quot;1.0&quot;...

Как считывать и как записывать XML файлы? И вообще,является ли хорошим тоном хранить данные в xml?
Я знаю,насколько часто меня любят отправлять в гугл,но проблема такова,что везде показывается работа с разными классами и методами записи и...

Выгрузка в XML файл результатов запроса. Создание xml схемы с имеющегося xml файла
Доброго времени суток. Имеется необходимый для загрузки пример XML файла и из него необходимо построить XML схему для выгрузки данных...

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

Как отсортировать XML файл
Имеется следующий XML: &lt;Objects&gt; &lt;Object Name=&quot;BAY_bx_glualfa&quot; TexDictName=&quot;bx_bay2&quot; DrawDist=&quot;90&quot; WddName=&quot;null&quot; /&gt; &lt;Object...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
[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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru