Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.08.2012, 22:40
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию Открыть и прочитать XML

Прошу помочь в решении вопроса: есть xml file типа

Код:
- <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
 - <s:Schema id="RowsetSchema">
 - <s:ElementType name="row" content="eltOnly" rs:updatable="true">
 - <s:AttributeType name="Id" rs:number="1" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="Id" rs:keycolumn="true" rs:autoincrement="true">
 <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false" /> 
 </s:AttributeType>
 - <s:AttributeType name="Name" rs:number="2" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="Name">
 <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="100" /> 
 </s:AttributeType>
 - <s:AttributeType name="FullName" rs:number="3" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="FullName">
 <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="400" /> 
 </s:AttributeType>
 - <s:AttributeType name="ImageIndex" rs:number="4" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="ImageIndex">
 <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" /> 
 </s:AttributeType>
 - <s:AttributeType name="IdUnloading" rs:number="5" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="IdUnloading">
 <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" /> 
 </s:AttributeType>
 - <s:AttributeType name="SQLText" rs:number="6" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="SQLText">
 <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="1000" /> 
 </s:AttributeType>
 - <s:AttributeType name="Template" rs:number="7" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="Template">
 <s:datatype dt:type="bin.hex" dt:maxLength="2147483647" rs:long="true" /> 
 </s:AttributeType>
 - <s:AttributeType name="OldId" rs:number="8" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="OldId">
 <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" /> 
 </s:AttributeType>
 - <s:AttributeType name="IsQWizard" rs:number="9" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="IsQWizard">
 <s:datatype dt:type="boolean" dt:maxLength="2" rs:fixedlength="true" /> 
 </s:AttributeType>
 - <s:AttributeType name="IsUnit" rs:number="10" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="IsUnit">
 <s:datatype dt:type="boolean" dt:maxLength="2" rs:fixedlength="true" /> 
 </s:AttributeType>
 - <s:AttributeType name="PrintOnPrevPage" rs:number="11" rs:nullable="true" rs:writeunknown="true" rs:basecatalog="umu2_back" rs:basetable="ds_reports" rs:basecolumn="PrintOnPrevPage">
 <s:datatype dt:type="boolean" dt:maxLength="2" rs:fixedlength="true" /> 
 </s:AttributeType>
 <s:extends type="rs:rowbase" /> 
 </s:ElementType>
 </s:Schema>



 -<rs:data> // здесь свернутые данные

- <rs:update>
 - <rs:original>
 <z:row id="1" Time="0" /> 
 </rs:original>
 <z:row id="10" Time="54" /> 
 </rs:update>
 - <rs:update>
 - <rs:original>
 <z:row id="844" Time="410" /> 
 </rs:original>
 <z:row id="1" direc="Boris" /> 
 </rs:update>

 ...........

 </rs:data>

 </xml>

нужно вытащить из <rs:data>

Самый первый id и Time вывожу таким образом:

Код:
showmessage( VarToStr(XMLDocument1.DocumentElement.ChildNodes['rs:data'].ChildNodes['rs:update'].ChildNodes['rs:original'].ChildNodes.Nodes[0].Attributes['id']) ); //для id

Подскажите пожалуйста, как вывести остальные данные?
Ответить с цитированием
  #2  
Старый 14.08.2012, 11:38
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
Печаль

Что неужели никто не знает решение данной проблемы?
Ответить с цитированием
  #3  
Старый 14.08.2012, 12:02
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  rsdata: IXMLNode;
begin
  XMLDocument1.XML.Assign(Memo1.Lines);
  XMLDocument1.Active:=True;
  rsdata:=XMLDocument1.DocumentElement.ChildNodes['rs:data'];
  // 0
  ShowMessage(
    rsdata.ChildNodes[0].ChildNodes[0].ChildNodes[0].Attributes['id']
  );
  ShowMessage(
    rsdata.ChildNodes[0].ChildNodes[1].Attributes['id']
  );
  // 1
  ShowMessage(
    rsdata.ChildNodes[1].ChildNodes[0].ChildNodes[0].Attributes['id']
  );
  ShowMessage(
    rsdata.ChildNodes[1].ChildNodes[1].Attributes['id']
  );
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
lkz_07 (14.08.2012)
  #4  
Старый 14.08.2012, 12:53
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Виндовый slow as hell.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 14.08.2012, 13:11
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Виндовый slow as hell.
А каким лучше пользоваться? (Платные не предлагать )
Ответить с цитированием
  #6  
Старый 14.08.2012, 13:20
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
Смех

Цитата:
Сообщение от poli-smen
А каким лучше пользоваться? (Платные не предлагать )
Лучше пользоваться бесплатными
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 14.08.2012, 13:26
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Лучше пользоваться бесплатными
Само собой
А какими из бесплатных лучше пользоваться?
Ответить с цитированием
  #8  
Старый 14.08.2012, 14:20
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Тем, который лучше
Ну я в инете искал, по отзывам и скорости работы самый неплохой это Native XML.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 14.08.2012, 15:08
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Код:
var
  rsdata: IXMLNode;
begin
  XMLDocument1.XML.Assign(Memo1.Lines);
  XMLDocument1.Active:=True;
  rsdata:=XMLDocument1.DocumentElement.ChildNodes['rs:data'];
  // 0
  ShowMessage(
    rsdata.ChildNodes[0].ChildNodes[0].ChildNodes[0].Attributes['id']
  );
  ShowMessage(
    rsdata.ChildNodes[0].ChildNodes[1].Attributes['id']
  );
  // 1
  ShowMessage(
    rsdata.ChildNodes[1].ChildNodes[0].ChildNodes[0].Attributes['id']
  );
  ShowMessage(
    rsdata.ChildNodes[1].ChildNodes[1].Attributes['id']
  );
end;


Большое Вам спасибо. Работает.
А можно ли как-то в цикле сделать? Данных более 200!
Как узнать общее количество данных в блоке rs:data?
Ответить с цитированием
  #10  
Старый 14.08.2012, 15:20
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

можно и в цикле. см. Count у ChildNodes
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #11  
Старый 14.08.2012, 17:23
lkz_07 lkz_07 вне форума
Новичок
 
Регистрация: 12.03.2011
Сообщения: 50
Репутация: 10
По умолчанию

Делаю вот так:

Код:
for j:=0 to XMLDocument1.DocumentElement.ChildNodes['rs:data'].ChildNodes.Count-1 do begin

id := VarToStr(XMLDocument1.DocumentElement.ChildNodes['rs:data'].ChildNodes[j].ChildNodes[0].ChildNodes[0].Attributes['id']);
if id = 10 then time := VarToStr(XMLDocument1.DocumentElement.ChildNodes['rs:data'].ChildNodes[j].ChildNodes[0].ChildNodes[0].Attributes['Time']);
                   end;

Возникает ошибка.
Пытаюсь сделать поиск значения атрибута Time по id. Может лучше вариант есть (попроще)?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter