Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

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

 
el-eXtremo   (2006-08-15 09:25) [0]

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

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


 
evvcom ©   (2006-08-15 09:31) [1]

Закладка Internet: TXMLDocument


 
el-eXtremo   (2006-08-15 09:49) [2]

СПС :)


 
evvcom ©   (2006-08-15 10:24) [3]

ПЖС :)


 
Сергей М. ©   (2006-08-15 10:26) [4]

см. TurboPower XMLPartner


 
el-eXtremo   (2006-08-15 10:47) [5]

Да вроде и без турбопавер можно.
Есть какая-нить инфа по работе с TXMLDocument. Честно говоря в помощи не сильно разобрался. Какой бы нибудь пример..
Я накатал что нашел - но оно стирает исходный файл, а надо редактирвать.


 
Плохиш ©   (2006-08-15 10:58) [6]


> Я накатал что нашел - но оно стирает исходный файл, а надо
> редактирвать.

А сохранять не пробовал? (SaveToFile)


 
el-eXtremo   (2006-08-15 13:10) [7]

Да вот оно сохраняет стирая исходный.


 
Плохиш ©   (2006-08-15 13:25) [8]


> el-eXtremo   (15.08.06 13:10) [7]
> Да вот оно сохраняет стирая исходный.

И что?


 
el-eXtremo   (2006-08-15 16:26) [9]

эээ...

вобщем Tinifiles например

        MyIniFile := TIniFile.Create("path to ini");
         with MyIniFile do
         begin
               WriteString("Base", "Name", Edit1.Text);
         end;


не стирает исходный файл записывая новый, а лишь меняет необходимою строку.

Как это с TXMLDocument можно проделать?


 
Плохиш ©   (2006-08-15 18:11) [10]


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


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

 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"); создает новый чистый файл с тем что я "что то сделал"

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


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


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


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

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


 
alles ©   (2006-08-16 10:36) [14]

попробуйте и такой вариант
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 имеет проблемы с памятью


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

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

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


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

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

Помогите =(

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

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


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


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


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

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

Вот 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-18 01:30) [19]


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

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

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


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

А как надо?


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


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


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

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


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

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

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

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

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

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

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


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


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

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


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

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


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

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


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


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

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


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

я с тобой...


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

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


 
palva ©   (2006-09-06 21:39) [30]

> 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.



Страницы: 1 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.045 c
10-1124370623
Lotus
2005-08-18 17:10
2006.10.15
Достучаться до текста в ячейке таблицы Ворда


2-1159206788
dreamse
2006-09-25 21:53
2006.10.15
TBlobStream


1-1157523050
DmiSb
2006-09-06 10:10
2006.10.15
Как программно открыть календарь у TDateTimePicker ?


1-1157551934
Krants
2006-09-06 18:12
2006.10.15
"Freeze Panes" Exel


2-1159451950
шаааа
2006-09-28 17:59
2006.10.15
TObject(Sender) / Sender