Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.08.2018, 11:59
Аватар для Aqel
Aqel Aqel вне форума
Прохожий
 
Регистрация: 08.10.2011
Адрес: Пермь
Сообщения: 8
Версия Delphi: XE8
Репутация: 10
Вопрос Удаление строк из XML

Есть xml (конфиг .cfg):
Код HTML:
<?xml version="1.0" encoding="UTF-8"?> <setup title="${{ProductTitle}}"> ... <manifest> <file name="setup.exe" core="true"/> <file name="setup.cfg"/> <file name="eula.txt"/> <file name="${{EulaHtmlFile}}"/> <file name="${{FunctionalConsentFile}}"/> <file name="${{PrivacyPolicyFile}}"/> <file name="${{InstallerDllDirectory}}/NVI2.dll" core="true"/> <file name="${{InstallerDllDirectory}}/NvInstallerUtil.dll" core="true"/> <file name="${{InstallerDllDirectory}}/NVI2UI.dll" core="true"/> ... </manifest> </setup>

Мне нужно удалить несколько строчек:
<file name="${{EulaHtmlFile}}"/>,
<file name="${{PrivacyPolicyFile}}"/>,
<file name="${{InstallerDllDirectory}}/NVI2UI.dll" core="true"/>

- как это осуществить, глядел в сторону парсинга, но запутался в доску...

Вот наработка по поиску этих строк:

Код:
var
  i: Integer;
  s: string;
begin
  XMLDocument1.LoadFromFile('setup.cfg');
  XMLDocument1.Active:= true;
  RootNode:= XMLDocument1.DocumentElement;
  for i:= 0 to RootNode.ChildNodes['manifest'].ChildNodes.Count - 1 do
  mmo1.Lines.Add(RootNode.ChildNodes['file'].ChildNodes[i].Text);
  //XMLDocument1.ChildNodes.Delete(i); - этим хотел удалять


В мемо ничего не выводится...
__________________
Всё намного проще, чем есть на самом деле...

Последний раз редактировалось Aqel, 09.08.2018 в 13:41.
Ответить с цитированием
  #2  
Старый 10.08.2018, 00:10
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,161
Версия Delphi: 7, XE3, 10.2
Репутация: 49086
По умолчанию

правильно, что ничего не выводит, бо как текста в этих нодах нет. Все в атрибутах сидит.

Если xml отформатирован нормально, то можно по простому:
Код:
var
  S : TStringList;
  I : Integer;
begin
  S := TStringList.Create;
  S.LoadFromFile('you-file.cfg.or.xml');
  For I := S.Count-1 DownTo 0 Do
    If (Pos('${{EulaHtmlFile}}',S[i]) > 0) Or (Pos('${{PrivacyPolicyFile}}',S[i]) > 0) Or (Pos('${{InstallerDllDirectory}}/NVI2UI.dll',S[i]) > 0) 
      then S.Delete(I);
  S.SavetoFile('new-file-name.cfg.or.xml');
  S.Free;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Aqel (10.08.2018)
Ответ



ASPack

Продукт ASPack предназначен для архивации исполняемых файлов под Win32 и защиты от непрофессионального реверс-инжиниринга. ASPack позволяет уменьшать размер файлов и библиотек до 70%, что также позволяет сокращать время загрузки таких приложений в локальных сетях и Интернет.


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter