Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2018, 13:47   #1
Aqel
Пользователь
 
Аватар для Aqel
 
Регистрация: 07.05.2011
Сообщений: 24
Вопрос Удаление строк в XML

Есть 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); - этим хотел удалять
В мемо ничего не выводится...
Всё намного проще, чем есть на самом деле...
Aqel вне форума Ответить с цитированием
Старый 09.08.2018, 18:05   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

ЕСЛИ знать про xpath, то ...
from http://www.programmersforum.ru/showt...ht=selectNodes
Цитата:
Код:
uses msxml;  //подключить стандартный для windows XML парсер

var
  doc: IXMLDOMDocument;
  list: IXMLDOMNodeList;
  xml: IXMLDOMNode;
 
doc:=CoDOMDocument.Create; 
doc.Load('1.xml'); //загрузить документ

list:=doc.selectnodes('//CadastralNumber'); //получить ВСЕ nodes данного тега.
for j:=0 to list.length-1 do begin 
 memox.add(list.items[j].text);    //перенести значения каждого найденного тега в Мемо..
end;
но нам нужно-то немного другое
Цитата:
file name="${{EulaHtmlFile}}"/>,
найти и удалить
найти (далее "перевод" первой строки кода)
file ---узел с именем
// -- любой вложенности
@name ---с атрибутом name
= --имеющим
"${{EulaHtmlFile}}" ---заданное значение
Код:
// немножко xpath 
r:=doc.selectsingleNode(//file[@name="${{EulaHtmlFile}}"]) //это мы нашли что хотим удалить
p:=r.ParentNode; //для удаления нам нужен его родитель
p.RemoteChild(r);// и теперь спокойно удалим
сделаем по три строки для каждой из удаляемых
ИЛИ процедура из трех строк с параметром строка для удаления
+ по строке кода на каждое удаление
и потом
Код:
doc.Save(....);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление узла в XML Oleg_SS Общие вопросы Delphi 6 12.09.2014 05:54
Удаление узла из XML Oleg_SS Общие вопросы Delphi 7 18.08.2014 11:09
Удаление XML тега [Smarik] C# (си шарп) 1 13.09.2013 08:09
Удаление записи из XML файла Slavytich PHP 1 01.02.2012 12:38
перенос строк удаление ненужных строк HelperAwM Microsoft Office Excel 5 26.06.2010 18:42