Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

есть ли модули по редактированию 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.041 c
2-1159531313
Sergey_b
2006-09-29 16:01
2006.10.15
Где нажата кнопка


6-1148280538
Тфьу
2006-05-22 10:48
2006.10.15
TIdSMTP при отсылке в теме пишет ерунду...


8-1142814706
Петр
2006-03-20 03:31
2006.10.15
Анимация - Графика


2-1159637385
waaw
2006-09-30 21:29
2006.10.15
{$INCLUDE ...


2-1159455089
RainKMM
2006-09-28 18:51
2006.10.15
Как заархивировать папку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский