Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2014, 12:47   #1
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
Вопрос XML в DATASET

Коллеги наткнулся в С# на замечательный код

Код:
private void btnFile_Click(object sender, System.EventArgs e)
{
    string myXMLfile = "C:\\MySchema.xml";
    DataSet ds = new DataSet(); 
    try
    {
        ds.ReadXml(myXMLfile);
        dataGrid1.DataSource = ds;
        dataGrid1.DataMember = "Cust";
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}
Подумал.... а чего в delphi такое нельзя... оказалось можно...
даже нагуглил что есть компонент ClientDataSet1.
Но как в него загрузить XML так и не понял. Может кто работал с этим компонентом и знает как получить таблицу из XML. Особенно если у XML 3-4 вложения.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 05.02.2014, 13:06   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

+ XMLTransform нужно смотреть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.02.2014, 15:51   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

В поиске компонентов не нашёл такого в XE5, может его из какотой библиотеке подгрузить надо? если да.. не подскажите из какой?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 05.02.2014, 16:03   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В XE5 не знаю, возможно там другие средства. Это в D7
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.02.2014, 21:25   #5
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

оказываются лежат в файле dclwbm190.bpl , но у меня почему то нет в дистрибутиве.
Может у кого есть?


добавлено
p.s. лежат теперь в unit Xmlxform
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 05.02.2014 в 22:12.
BARNEY вне форума Ответить с цитированием
Старый 13.02.2014, 07:03   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Всё получилось. код

Код:
 
XMLTransform1.SourceXMLFile:='L.xml';
XMLTransform1.TransformationFile:='L.xtr';  // Создал XMLMapping 
ClientDataSet1.XMLData:=XMLTransform1.Data;


Теперь вопрос как обратиться в цикле к вложенным полям (отображаются DATASET), или как к ним обратиться как к таблице отдельной?

выглядит это так
[IMG][/IMG]


===== на учился считывать 1 вложенное значение ..как пробежаться по всем я не понял

Код:
while not ClientDataSet1.Eof do
 begin
  Memo1.Lines.Add( TObjectField(ClientDataSet1.FieldByName('DOST')).Fields.FieldByName('DOST').AsString);
  ClientDataSet1.Next;
 end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 13.02.2014 в 10:04.
BARNEY вне форума Ответить с цитированием
Старый 14.02.2014, 07:04   #7
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Нет не у кого идей как пробежаться по вложениям?

Так я только получаю доступ к 1 строчке. Я понимаю что нужен вложенный цикл но не получается его написать.

Код:
while not ClientDataSet1.Eof do
 begin
  Memo1.Lines.Add( TObjectField(ClientDataSet1.FieldByName('DOST')).Fields.FieldByName('DOST').AsString);
  ClientDataSet1.Next;
 end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 14.02.2014, 09:16   #8
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

передполагаю что ClientDataSet1.FieldByName('DOST') - такой же TClientDataSet
так что как то так:
Код:
while not ClientDataSet1.Eof do
begin
  with TClientDataSet(ClientDataSet1.FieldByName('DOST')) do
  while not Eof do
    begin
      Memo1.Lines.Add(Fields.FieldByName('DOST').AsString);
      Next;
    end;
  ClientDataSet1.Next;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 14.02.2014, 10:14   #9
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

Спасибо попробовал..не получилось на любой из закоментированых строчек вываливается ошибка acces viotetion

Код:
 while not ClientDataSet1.Eof do
begin
  if ClientDataSet1.FieldByName('ID_PAC').AsString='ED6ABFA7-F546-463A-B0FB-A6F813C931F5' then
  while not TClientDataSet(ClientDataSet1.FieldByName('DOST')).Eof do
    begin
   //  TClientDataSet(ClientDataSet1.FieldByName('DOST')).Last;
   // TClientDataSet(ClientDataSet1.FieldByName('DOST')).FieldByName('DOST').AsString;
   //  TClientDataSet(ClientDataSet1.FieldByName('DOST')).RecordCount;
     // Memo1.Lines.Add(TClientDataSet(ClientDataSet1.FieldByName('DOST')).Fields.FieldByName('DOST').AsString);
   //   TClientDataSet(ClientDataSet1.FieldByName('DOST')).Next;
    end;
  ClientDataSet1.Next;
end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 14.02.2014, 11:17   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
for i:=0 to ClientDataSet1.Fields.Count-1 do
  if ClientDataSet1.Fields.Fields[i].DataType=ftDataSet	then begin
    СlientDataSet2.DataSetField:=TDataSetField(ClientDataSet1.Fields.Fields[i]);
    Break;
  end;
В СlientDataSet2 в свою очередь могут быть свои поля типа ftDataSet. Зависит от устройства xml

ADD Добавил небольшой пример

ADD Удалил вложение - не досмотрел за содержимым xml из примера

ADD Убрал из XML приватные данные и снова залил
Вложения
Тип файла: zip Новая папка (16).zip (9.2 Кб, 83 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.02.2014 в 14:19.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#. Парсинг XML-файла с использованием библиотеки System.xml.linq Gift020 Помощь студентам 5 04.04.2013 13:44
программа, которая должна находить в данной директории *.xml файлы и переименовывать в *.xml.dt. (Delphi) nice.name Помощь студентам 2 09.01.2013 15:40
Строку из одного DataSet в другой DataSet Abbath1349 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 22.05.2011 19:26
Cформировать XML через DataSet welcomeTo ASP.NET 0 06.04.2011 14:25
Из DataSet работающего по циклу в DataSet maroder22 БД в Delphi 1 05.09.2010 23:22