Работа с XML как с деревом

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Работа с XML как с деревом

Сообщение Padre_Mortius »

Понадобилась возможность работы с XML как с деревом. Если кому пригодиться. то собственно ссылка на сабж http://depositfiles.com/ru/rmv/1376557974369864

Данный невизуальный компонент был портирован из JVCL с некоторыми дополнениями и изменениями. Был проверен на кодировке Win1251.
Последний раз редактировалось Padre_Mortius 11.09.2008 16:56:59, всего редактировалось 1 раз.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

ev перекачаешь на сервер ?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

А чем, если не секрет, родной модуль DOM не подошел?
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Нужна была поддержка Unicode. Не было возможности разобраться с компонентом DOM на предмет дописания нужных кодировок.
ev
долгожитель
Сообщения: 1797
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение ev »

Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Если будут нужны примеры использования данного компонента, то чуть позже выложу и их
ViTality
постоялец
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение ViTality »

чет я непонял, то
Нужна была поддержка Unicode.

(в DOm все через widecharы делаеться)
но
Был проверен на кодировке Win1251.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

ViTality

Чтобы не быть голословным, попробуйте для начала открыть файл у которого прописана кодировка win1251.

Код: Выделить всё

<?xml version="1.0" encoding="windows-1251"?>


В версии fpc 2.2.0 у меня это не получилось. Наблюдал сообщение о том, что данная кодировка не поддерживается. Если у вас все работает. то я рад за вас

До уникода я еще не добрался. сейчас времени нет на проверку
Последний раз редактировалось Padre_Mortius 04.02.2008 18:28:55, всего редактировалось 1 раз.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Это было во-первых, а во вторых у меня проект горит. очень уж он нужен с разбором xml-файлов и действий над ними, чтобы спокойно поддерживались кодировки win1251 и utf8 без бубна и танцев
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Да, пока что там поддерживаются только utf-8, utf-16 и iso8859-1.
ViTality
постоялец
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение ViTality »

Тебя спросили чем не катит DOM
ты ответил что потомучто нужел был юникод, хотя в DOM все на widechar`ах

а переписаный тобой модуль ориентирован на работу с 1251

короче я прост запутался и решил уточнить :)

Вопрос: а Работа с XML как с деревом это всмысле:
я знаю имена нодов
и обращаюсь к ним в виде:

А:=документ\нод1\нод2\нод3.Значение
Б:=документ\нод1\нод2\нод4.Значение

чтото в этом роде???
п.с. модуль еще не смотрел
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Да именно.

Код: Выделить всё

var
  XmlDoc: TjvXmlTree;
  Node: TjvXmlNode; 
  Node1Value: AnsiString;
begin
  try
    XmlDoc := TjvXmlTree.Create('','', nil);
    XmlDoc.LoadFromFile(aFileName);
    Node := XmlDoc.FindNamedNode('nodeFirst');   
    Node1Value:=Node.GetNamePathNode('nodeFirst/nodeSecond').Value;
  finally
    XmlDoc.Free;
  end;
end;


Но мне больше нравится обращаться с узлами немного по другому

Код: Выделить всё

var
  XmlDoc: TjvXmlTree;
  S: AnsiString;
begin
  try
    XmlDoc := TjvXmlTree.Create('','',nil);
    XmlDoc.LoadFromFile(FileName);
    S := XmlDoc.FindNamedNode('sen:Object').Value;
    if Length(S) <> 0 then UnBase64(S, FileName);
  finally
    FreeAndNil(XmlDoc);
  end;
end;
Ответить