На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Удаление строк в XML, Удаление нескольких фиксированных строчек
Есть xml (конфиг .cfg):

ExpandedWrap disabled
    <?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"/>


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

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

ExpandedWrap disabled
    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); - этим хотел удалять


В мемо ничего не выводится...
Подпись выключена.
Самый простой и топорный вариант - читать построчно, искать вхождения, фильтровать.
Если же идти через XML, то сначала читать про устройство формата и его объектную модель. Потому как приведенный код показывает, что ты в нем ни в зуб ногой.
Codero ergo sum
// Программирую — значит, существую
Цитата Fr0sT @

Это точно...

Вот мне помогли:
ExpandedWrap disabled
    procedure TForm1.Button1Click(Sender: TObject);
    const A: array [1..3] of String = ('EulaHtmlFile', 'PrivacyPolicyFile', 'NVI2UI.dll');
    var i, j: integer;
        L: TStringList;
    begin
     L := TStringList.Create;
     L.LoadFromFile('setup.cfg');
     for i := L.Count - 1 downto 0 do
      for j := 1 to 3 do
       if Pos(A[j], L.Strings[i]) > 0 then
         begin
          L.Delete(i);
          break;
         end;
     L.SaveToFile('setup.cfg');
     L.Free;
    end;
Сообщение отредактировано: Aqel -
Подпись выключена.
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0848 ]   [ 20 queries used ]   [ Generated: 20.08.18, 20:21 GMT ]