|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Открыть и прочитать 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
|
|||
|
|||
Что неужели никто не знает решение данной проблемы?
|
#3
|
||||
|
||||
Код:
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
|
||||
|
||||
Виндовый slow as hell.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
||||
|
||||
Цитата:
|
#6
|
||||
|
||||
Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
||||
|
||||
Цитата:
А какими из бесплатных лучше пользоваться? |
#8
|
||||
|
||||
Тем, который лучше
Ну я в инете искал, по отзывам и скорости работы самый неплохой это Native XML. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
|||
|
|||
Цитата:
Большое Вам спасибо. Работает. А можно ли как-то в цикле сделать? Данных более 200! Как узнать общее количество данных в блоке rs:data? |
#10
|
||||
|
||||
можно и в цикле. см. Count у ChildNodes
Пишу программы за еду. __________________ |
#11
|
|||
|
|||
Делаю вот так:
Код:
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. Может лучше вариант есть (попроще)? |