Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

есть ли модули по редактированию xml


Страницы:   1 2

el-eXtremo ©   (2006-08-15 09:25:00) 

Интересует, есть ли аналог TInifiles, модуль, способный искать в файле теги и редактировать их содержимое

<DownloadDirectory type="string">C:\Downloads\</DownloadDirectory>
- >
<DownloadDirectory type="string">E:\Download\</DownloadDirectory>


palva   (2006-09-06 21:39:00) [1]

> XMLDocument c русскими символами же не работает?

Это почему? У меня почему-то работает. Вот пример, который читает из XML файла название валюты по русски в Win1251. Потом я перевожу его в дос кодировку и печатаю.

{$APPTYPE CONSOLE}
{ Информатор о курсе валют }
uses
 ActiveX, XMLDoc, XMLIntf, Windows;
var
 XMLDoc2: IXMLDocument;
 iRoot, N1: IXMLNode;
 iCN: IXMLNodeList;
 sc, so: String;
 i: Integer;
begin
 CoInitialize(Nil);
 XMLDoc2:=TXMLDocument.Create(' http://www.cbr.ru/scripts/XML_daily.asp');
 iRoot := XMLDoc2.DocumentElement;
 WriteLn('На дату ', iRoot.Attributes['Date']);
 N1 := iRoot.ChildNodes[0];
 for i:=1 to iRoot.ChildNodes.Count do begin
   if (N1.Attributes['ID'] = 'R01235') Or
      (N1.Attributes['ID'] = 'R01239') Or
      (N1.Attributes['ID'] = 'R01820') then begin
     iCN := N1.ChildNodes;
     Write('  За ', iCN.FindNode('Nominal').Text, ' ');
     sc := iCN.FindNode('Name').Text;
     SetLength(so, Length(sc));
     CharToOem(PChar(sc), PChar(so));
     Write(so, ' ');
     Write(iCN.FindNode('Value').Text, ' ');
     WriteLn('рублей');
   end;
   N1 := N1.NextSibling;
 end;
 CoUninitialize;
end.


Frozzen   (2006-09-06 19:54:00) [2]

XMLDocument c русскими символами же не работает?
если встретиться  <Nick type="Вася">?


el-eXtremo   (2006-08-19 00:46:00) [3]

я с тобой...


Плохиш   (2006-08-19 00:33:00) [4]


> el-eXtremo   (19.08.06 00:25) [26]

Иди улицу мести.


el-eXtremo   (2006-08-19 00:25:00) [5]

Да какая разница, не работает все равно
XMLfile := XMLDocument1.Create(nil);
тоже самое


el-eXtremo   (2006-08-19 00:23:00) [6]

В нете нашел... :)


Плохиш   (2006-08-19 00:17:00) [7]


> el-eXtremo   (18.08.06 18:17) [22]
> без XMLfile := XMLDocument1.Create(XMLDocument1.FileName);

Скажи честно, ты эту дурость сам выдумал, а ли вычитал где?


el-eXtremo   (2006-08-18 22:46:00) [8]

Наверное это уже другая тема, тем более её вроде уже обсуждали.
Всё работает, кроме того, что вылазит error EAccessViolation.

Пробовал так
Delphi: устранение ошибки EAccessViolation

Ошибка доступа к памяти. Как правило - выход за пределы массива. Что бы точно установить место недопустимой команды надо в Project/Options/Compiler/Runtime Errors поставить галочку Range checking.

Note. Рекомундую установить все остальные галочки в Runtime Errors - это облегчит контроль других ошибок (а возможно, поможет и в исправлении этой).

но все равно ошибка прежняя.

заметил что если сократить xml файл (удалить половину тегов) прорамма начинает работать. Более того однажды таки скомилировалось.


el-eXtremo   (2006-08-18 18:17:00) [9]

без XMLfile := XMLDocument1.Create(XMLDocument1.FileName); пишет ошибку


Плохиш   (2006-08-18 10:46:00) [10]


> MyDoc.ChildNodes['Settings'].ChildNodes['Nick'].Text :=
> Edit1.Text;


el-eXtremo   (2006-08-18 10:44:00) [11]

А как надо?


Плохиш   (2006-08-18 01:30:00) [12]


> XMLfile := XMLDocument1.Create(XMLDocument1.FileName);

Чё це есть такэ?

Тэг "<DCPlusPlus>" является узлом, на который указывает XMLFile.DocumentElement, поэтому его уже не надо указывать как ChildNodes.


el-eXtremo   (2006-08-17 22:04:00) [13]

Сделал, что хотел, но есть небольшая проблемма.

Вот xml с которым работаю.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<DCPlusPlus>
<Settings>
 <Nick type="string">el-eXtremo</Nick>
 <UploadSpeed type="string">LAN(T3)</UploadSpeed>
 <Description type="string">comp</Description>
</Settings>
<Share/>
<NoShare/>
<PreviewApps/>
</DCPlusPlus>


В таком виде изменение Nick происходит как необходимо, но при закрытии программы выскакивает ошибка Runtime Error 216

XMLfile := XMLDocument1.Create(XMLDocument1.FileName);
MyDoc := XMLFile.DocumentElement;
MyDoc.ChildNodes['Settings'].ChildNodes['Nick'].Text := Edit1.Text;
XMLfile.SaveToFile(XMLDocument1.FileName);


В этом виде изменения файла xml происходят неверно

XMLfile := XMLDocument1.Create(XMLDocument1.FileName);
MyDoc := XMLFile.DocumentElement;
MyDoc.ChildNodes['DCPlusPlus'].ChildNodes['Settings'].ChildNodes['Nick'].Text := Edit1.Text;
XMLfile.SaveToFile(XMLDocument1.FileName);


и дописывает в конец

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<DCPlusPlus>
<Settings>
 <Nick type="string">el-eXtremo</Nick>
 <UploadSpeed type="string">LAN(T3)</UploadSpeed>
 <Description type="string">comp</Description>
</Settings>
<Share/>
<NoShare/>
<PreviewApps/>
</DCPlusPlus>
<DCPlusPlus><Settings><Nick>Edit1</Nick></Settings></DCPlusPlus></DCPlusPlus>


Плохиш   (2006-08-17 10:56:00) [14]


 MyDoc := MyXMLFile.DocumentElement;
 MyDoc.ChildNodes['people'].ChildNodes['age'].Text := '15';


el-eXtremo   (2006-08-17 00:34:00) [15]

Не, все таки не получилось.

Помогите =(

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<people>
<age>17</age>
<name>Sergey</name>
....(другие теги)
<title>base</title>
</people>

можете написать пару строк как менять значения age, при этом не меняя name и т.д.


el-eXtremo   (2006-08-16 23:32:00) [16]

Разобрался, всем спасибо!!!

alles отдельный респект!


alles   (2006-08-16 10:36:00) [17]

попробуйте и такой вариант
http://www.codenet.ru/progr/delphi/stat/delphi_xml.php
тут все свойства
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/b9f053cf-84cf-4a1c-9d7e-b3aabf9830a2.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/4ead2a13-de31-487e-b826-53f132f25cbb.asp
я где-то читал что TXMLDocument имеет проблемы с памятью


Плохиш   (2006-08-15 19:20:00) [18]

Кстати, рекомендую справку по AddChild внимательно прочитать, особенно последнии строки.


Плохиш   (2006-08-15 19:14:00) [19]


var
     MyDoc: IXMLNode;
begin
 MyXMLFile := TXMLDocument.Create('path to xml');
 MyDoc := MyXMLFile.DocumentElement;
 MyDoc.AddChild('quiz');
 MyXMLFile.SaveToFile('path to xml');


el-eXtremo   (2006-08-15 18:43:00) [20]

 MyXMLFile := TXMLDocument.Create('path to xml');
//  Тут чё-та делаем
MyXMLFile.SaveToFile('path to xml');


Ок, был xml файл с кучей тегов... задача - изменить пару значений в некоторых тегах.

я MyXMLFile := TXMLDocument.Create('path to xml'); потом XMLfile.AddChild('quiz'); и т.д.
MyXMLFile.SaveToFile('path to xml'); создает новый чистый файл с тем что я "что то сделал"

Интересует какой-то пример... хоть какой то.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо