![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
есть ли модули по редактированию xml
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'); создает новый чистый файл с тем что я "что то сделал"
Интересует какой-то пример... хоть какой то.