powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Удаление строк из XML
12 сообщений из 12, страница 1 из 1
Удаление строк из XML
    #39685390
Aqel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть xml ( конфиг .cfg ):
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<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"/>

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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); - этим хотел удалять



В мемо ничего не выводится...

Модератор: Как мне оформить свое сообщение?
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685403
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
воспользуйтесь отладкой
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685406
Aqel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45,

Это где?
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685412
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aqelглядел в сторону парсинга

зачем тебе парсить ? если текст строк у тебя фикесированный, без переменных???

1: http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.IOUtils.TFile.ReadAllText
2: http://www.delphibasics.ru/StringReplace.php
3: http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.IOUtils.TFile.WriteAllText
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685415
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45воспользуйтесь отладкой
AqelЭто где?

В мемориз! на башорг!
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685444
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парсинг не нужно, хватит обычного TStringList'а с удалением лишнего:

Код: pascal
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.
var
  sourceList: TStringList;
  destList: TStringList;
  fileName: string;
  I: Integer;
  s: string;
begin
  fileName := 'D:\test\install.ini';

  sourceList := TStringList.Create;
  destList := TStringList.Create;
  try    
    sourceList.LoadFromFile(fileName);
    
    for I := 0 to sourceList.Count - 1 do
    begin
      s := sourceList[I];
      if (s = '<file name="${{EulaHtmlFile}}"/>')
        or (s = '<file name="${{PrivacyPolicyFile}}"/>')
        or (s = '<file name="${{InstallerDllDirectory}}/NVI2UI.dll" core="true"/>') then
      begin
        // пропуск ненужных строк
        Continue;
      end;
      
      destList.Add(s);
    end;

    // результат пишем в тот же файл
    destList.SaveToFile(fileName);
  finally
    FreeAndNil(sourceList);
    FreeAndNil(destList);
  end;
end;
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685458
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

хватит обычной string, никакие тут объекты не нужны, тем более тормознутый string list

тем более ты не обрабатываешь ситуацию нескольких тэгов в одной строке или пробелов до/после теэга
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685465
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochтем более ты не обрабатываешь ситуацию нескольких тэгов в одной строке или пробелов до/после теэга
Этого в ТЗ не было :-) Тогда уж и пробелы внутри тегов можно добавить, которые string replace тоже не сможет обработать.
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685596
Aqel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот подсказали:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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;



Добавлю ваш try и всё пучком, всем спасибо!
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685704
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aqel,

если упомянутые подстроки вдруг встретятся в какой-то другой строке кроме нужной....
в нескольких разных строках файла например...

но вам виднее
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685707
Aqel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch,

Нет там одиночные строки ( которые надо удалить ) - повтора нет. Так, что мне подходить хоть и по простому варианту. Хотя мне ещё подкинули мыслишку по XML:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
uses msxml;  //подключить стандартный для windows XML парсер

var
  doc: IXMLDOMDocument;
  list: IXMLDOMNodeList;
  xml: IXMLDOMNode;
 
doc:=CoDOMDocument.Create; 
doc.Load('1.xml'); //загрузить документ
r:=doc.selectsingleNode(//file[@name="${{EulaHtmlFile}}"]) //это мы нашли что хотим удалить
p:=r.ParentNode; //для удаления нам нужен его родитель
p.RemoteChild(r);// и теперь спокойно удалим
...
doc.Save(....);



file name="${{EulaHtmlFile}}"/>,
найти и удалить
найти (далее "перевод" первой строки кода)
file ---узел с именем
// -- любой вложенности
@name ---с атрибутом name
= --имеющим
"${{EulaHtmlFile}}" ---заданное значение

сделаем по три строки для каждой из удаляемых
ИЛИ процедура из трех строк с параметром строка для удаления
+ по строке кода на каждое удаление
и потом сохранить.
...
Рейтинг: 0 / 0
Удаление строк из XML
    #39685757
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AqelНет там одиночные строки ( которые надо удалить ) - повтора нет

тогда самое простое - три команды и одна переменная

21635779
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Удаление строк из XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]