Изначально писалась для себя, пользовался пару лет, теперь решил выложить.
Если кто-то спросит - "Нафига ты написал эту хрень?" - я отвечу, что однажды у меня возникла необходимость изменить пару значений в файле переноса данных 1С.
Размер у него был около 12 мегабайт.
Машина у меня тогда была не сказать что старая, но и не сильно крутая, с 256мб памяти.
Сначала я попытался открыть его ФАРом. Файл открылся, но работать с ним было практически невозможно, т.к. ФАР при длинне одной строки в файле в несколько тысяч символов начинал откровенно тормозить.
Естественно, я полез в сеть, скачал несколько редакторов XML более-менее приемлимого размера.
Попробовал. Не помню, что это были за редакторы, но тормозили они на моей машине с этим файлом изрядно. Немного подумав, я решил что что-то здесь явно не так, так как если программа требует для открытия 12-метрового файла порядка 150-200 метров памяти и потом тормозит от каждого движения курсора, то на такие объемы она просто не рассчитывалась (да, я понимаю, что в этих редакторах много крутых фич и рюшечек, но мне-то надо было всего лишь поправить пару значений).
Осознав это, я вспомнил главного злодея из 5-го элемента, и со словами "хочешь сделать хорошо - сделай это сам" - запустил Delphi.
В принципе, я уже был готов самостоятельно написать простенький и ни на что не претендующий xml-парсер, но решил сначала попробовать стандартные средства.
Кинул на форму TXMLDocument, прописал путь к файлу, и сказал "Active := True".
"Вж-ж-ж" - сказала японская автоматическая пила, и файл открылся, причем подозрительно быстро.
"Ого!" - сказали суровые русские мужики в моем лице.
В итоге выяснилось, что открывается-то он практически моментально, но при этом грузит только корневые узлы дерева. На загрузку всех узлов времени требуется значительно больше. Что-то в районе аж целой минуты-другой :) (файл, напомню, БОЛЬШОЙ).
Так что сам парсер (стандартный микрософтовский msxml3.dll) оказался ни в чем не виноват. За что программистам из Микрософт - отдельно спасибо. Правда, далеко не все программисты Микрософт одинаково полезны - это становится понятным, если попробовать открыть такой большой файл в Internet Explorer :)
В общем в итоге - получилась эта программа.
Узлы она подгружает динамически, т.е если файл большой, но корневых узлов немного, то откроется она практически мгновенно. При попытке раскрытия незагруженного узла, он подгружается в память, которой тоже конечно требуется парсеру немало, но зато после того как узел загружен, работа с ним идет без тормозов.
По признанию некоего "Господин ПЖ" с mista.ru - прога открыла xml на 480 Мб, и вела себя вполне адекватно, чем даже меня удивила. Правда, сколько ей потребовалось для этого памяти не говорилось, но, полагаю, очень немало.
Есть поиск с несколькими параметрами поиска.
Если в окне поиска снять галочку "Инициализировать узлы.", то поиск будет происходить только в тех узлах, что уже загружены в память(уже открывались). Т.е. не факт что во всех.
Галочка "Выводить результаты в панель результатов поиска" - если ее снять, то поиск будет идти до первого совпадения, если же ее оставить включенной, то будет просмотрен весь файл, а результаты будут выведены в боковую панель поиска. В этой боковой панели, если два раза кликнуть на строку, то откроется соответствующий узел в основном окне.
Что касается версии 2:
Зачеркнутое - для нее более не актуально
Редактировать можно только значения атрибутов. Добавлять/удалять атрибуты/узлы - нельзя (во всяком случае, мне это не требовалось и до сих пор не требуется :)
Выпадающий список на панели инструментов - это выбор парсера.
Иногда одним можно открыть файлы, которые не понимает другой из-за ошибок в структуре/содержании файла.
Однако, не факт, что у вас в системе стоят парсеры OpenXML или XercesXML, и, если вы выберете отсутствующий парсер, вылезет ошибка. В этом случае просто выберите существующий парсер. И вообще - рекомендую пользоваться только MsXml-парсером.
Все эти годы я им пользовался, иногда что-то дописывал. Сейчас дошли руки немного "причесать", и предложить всем желающим. Перенес я его на дельфи 10 не так давно, и компиляция под x64 - основная причина выкладывания на Инфостарт версии 2.
Теперь это приложение x64, соответственно нет ограничения использования памяти в 2гб.
Добавлено добавление и переименование узлов и атрибутов. (тавтология... мм..)
Измененные элементы помечаются красным кружком в правом нижнем углу иконки. Кнопкой на панели можно включить фильтр "Показать только измененные элементы".
В поиске можно выбрать: искать только в названиях элементов, или только в значениях (или везде, разумеется).
В строке состояния показывает: id - порядковый номер элемента в родительском узле, child - количество дочерних элементов у узла, скорость инициализации последнего узла, размер файла при открытии, кодировка файла.
Появился список последних открытых файлов в меню "Файл", и история поиска.
Понимает командную строку - AKXMLEdit64.exe <filename>
История версий
2.0.0.20
- Скомпилирован под x64, теперь нет ограничения по памяти в 2гб.
- Добавление и переименование узлов и атрибутов.
- Опция в поиске - искать только в названиях или значениях
- Пометка измененных элементов.
- Фильтр по измененным элементам.
- Что-то еще по мелочи
1.5.0.7 (12.10.2010)
Сделана возможность в панели результатов поиска сохранения этих самых результатов (маленькая кнопочка в заголовке панели)
1.5.0.1
Сделана возможность удаления узлов и атрибутов
Добавлена возможность выделения нескольких элементов (в пределах одного уровня)
Мелкие багофиксы
1.4.0.15
- В окне "О программе" добавлена возможность выделить и скопировать номер кошелька.
1.4.0.14
- Вернул стандартный меню/тулбары для отвязки от gdiplus.dll
- Окно индикации инициализации узла
- Окно индикации поиска,прекращение поиска по Esc
- исправлен глюк с панелью поиска - длинный текст не отображался
Вступайте в нашу телеграмм-группу Инфостарт