akXMLEdit v.1.2 Особенность - легко и просто открывает большие файлы
мегабайт так в 12, например файл переноса 1С,
только память подавай.
Функций у программы - целых 3. Открыть и показать файл, найти что нам нужно,
и отредактировать значение в ноде.'
Если кто-то спросит - "Нафига ты написал эту хрень?" - я отвечу, что однажды
у меня возникла необходимость изменить пару значений в файле переноса данных 1С.
Размер у него был как раз около 12 мегабайт.
Машина у меня тогда была не сказать что старая, но и не сильно крутая, с 256мб памяти.
Сначала я попытался открыть его ФАРом. Файл открылся, но работать с ним было
практически невозможно, т.к. ФАР при длинне одной строки в файле в несколько тысяч символов начинал откровенно тормозить.
Естественно, я полез в сеть, скачал несколько редакторов XML более-менее приемлимого размера.
Попробовал. Не помню, что это были за редакторы, но тормозили они на моей машине с этим файлом изрядно. Немного подумав, я решил что что-то здесь явно не так, так как если
программа требует для открытия 12-метрового файла порядка 150-200 метров памяти и
потом тормозит от каждого движения курсора, то на такие объемы она просто не рассчитывалась.
(да, я понимаю, что в этих редакторах много крутых фич и рюшечек, но мне-то надо было
всего лишь поправить пару значений).
Осознав это, я вспомнил главного злодея из 5-го элемента, и со словами "хочешь
сделать хорошо - сделай это сам" - запустил Delphi.
В принципе, я уже был готов самостоятельно написать простенький и ни на что
не претендующий xml-парсер, но решил сначала попробовать стандартные средства.
Кинул на форму TXMLDocument, прописал путь к файлу, и сказал "Active := True".
"Вж-ж-ж" - сказала японская автоматическая пила, и файл открылся, при чем подозрительно быстро. "Ого!" - сказали суровые русские мужики в моем лице.
В итоге выяснилось, что открывается-то он практически моментально, но при этом грузит
только корневые узлы дерева. На загрузку всех узлов времени требутся значительно больше.
Что-то в районе аж целой минуты-другой (файл, напомню, БОЛЬШОЙ).
Так что сам парсер (стандартный микрософтовский msxml3.dll) оказался ни в чем не виноват.
За что программистам из Микрософт - отдельно спасибо. Правда, далеко не все программисты Микрософт одинаково полезны - это становится понятным, если попробовать открыть такой большой файл в Internet Explorer
В общем в итоге - получилась это программа.
Узлы она подгружает динамически, т.е если файл большой, но корневых узлов немного,
то откроется она практически мгновенно. При попытке раскрытия незагруженного узла,
он подгружается в память, которой тоже конечно требуется парсеру немало, но зато
после того как узел загружен, работа с ним идет без тормозов.
Есть поиск с несколькими параметрами поиска.
Если в окне поиска снять галочку "Инициализировать узлы.", то поиск будет происходить
только в тех узлах, что уже загружены в память(уже открывались). Т.е. не факт что во всех.
Галочка "Выводить результаты в панель результатов поиска" - если ее снять,
то поиск будет идти до первого совпадения, если же ее оставить включенной, то будет
просмотрен весь файл, а результаты будут выведены в боковую панель поиска. В этой
боковой панели, если два раза кликнуть на строку, то откроется соотвествующий узел
в основном окне.
Редактировать можно только значения атрибутов. Добавлять/удалять
атрибуты/узлы - нельзя (во всяком случае мне это не требовалось и до сих пор не требуется
Выпадающий список на панели инструментов - это выбор парсера.
Иногда одним можно открыть файлы которые не понимает другой из-за ошибок
в структуре/содержании файла.
Однако, не факт, что у вас в системе стоят парсеры OpenXML или XercesXML, и,
если вы выберите отсутствующий парсер, вылезет ошибка. В этом случае просто выберите
существующий парсер. И вообще - рекомендую пользоваться только MsXml-парсером.
Вот скрин:
А еще понимает командную строку - <c:\akXmlEdit.exe file.xml>
Вот вроде и все. Кому надо - тот оценит.
Кауфман А.М., Абакан, 2005-2008