Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.172.243] |
|
Сообщ.
#1
,
|
|
|
Есть xml (конфиг .cfg):
<?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); - этим хотел удалять В мемо ничего не выводится... |
Сообщ.
#2
,
|
|
|
Самый простой и топорный вариант - читать построчно, искать вхождения, фильтровать.
Если же идти через XML, то сначала читать про устройство формата и его объектную модель. Потому как приведенный код показывает, что ты в нем ни в зуб ногой. |
Сообщ.
#3
,
|
|
|
Цитата Fr0sT @ Это точно... Вот мне помогли: 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; |
Сообщ.
#4
,
|
|
|
Aqel, задам пару наводящих вопросов, что помогут улучшить твой код:
|
Сообщ.
#5
,
|
|
|
Цитата Profi @ Aqel, задам пару наводящих вопросов, что помогут улучшить твой код: Поясню: - Каждый раз можно и не проверять (лишние циклы и время) эти значения (они только один раз встречаются в этом файле). - Эти строки всегда находятся в конце .xml(.cfg) файла и находятся рядом (друг за другом или через одну строчку). ..думаю так яснее?.. |
Сообщ.
#6
,
|
|
|
Цитата Aqel @ Цитата Profi @ Aqel, задам пару наводящих вопросов, что помогут улучшить твой код: Поясню: - Каждый раз можно и не проверять (лишние циклы и время) эти значения (они только один раз встречаются в этом файле). - Эти строки всегда находятся в конце .xml(.cfg) файла и находятся рядом (друг за другом или через одну строчку). ..думаю так яснее?.. Ну и как тогда должен выглядеть код? |