Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение данных из XML [D7]


Mikkle ©   (2010-05-08 10:16:00) 

дравствуйте.
У меня пара вопросов по переносу информации из xml-файла. Файл имеет такую структуру:

<main>
 <CN> a </CN>
 <Ct> b </Ct>
 <Place>
   <Reg> c </Reg>
   <Cod> d </Cod>
   <Nm> e </Nm>
   <Addr>
     <City> f </City>
     <Street> g </Street>
     <House> h </House>
   </Addr>
 </Place>
 <Place>
   <Reg> i </Reg>
   <Cod> j </Cod>
   <Nm> k </Nm>
   <Addr>
     <City> l </City>
     <Street> m </Street>
     <House> n </House>
   </Addr>
 </Place>
 <Dt> o </Dt>
</main>

я использую компонент TXMLDocument. С чтением из узлов, которые принадлежат непосредственно главному элементу main проблем не возникает, а вот вложенные подструктуры уже прочитать не могу. Я начинаю считывать так:

Node:=XMLDocument1.DocumentElement;
main.CN:=Node.ChildNodes.ChildValues['CN'];
main.Ct:=Node.ChildNodes.ChildValues['Ct'];

А дальше уже считать данные из <place> не получается. Узлы объявлены так:

A = record
 city: string;
 street: string;
 house: string;
end;
Pls = record
 Reg: string;
 Code: string;
 Nm: string;
 Addr: A;
end;
main = record
 CN: string;
 Ct: string;
 Place: Pls;
 Dt: string;
end;

Подскажите, пожалуйста, как прочитать информацию из "вложенных" деревьев. И еще вопрос: если у меня узел может встречаться в документе несколько раз (как, например, place), как сделать так, чтобы он все эти несколько раз и прочитался?


Slym   (2010-05-11 18:51:00) [1]

Mikkle   (08.05.10 10:16)
TXMLDocument

отстой....
http://yandex.ru/yandsearch?text=XPath

doc:=CreateOleObject('Msxml2.DOMDocument') as IDispatch;
doc.load('doc.xml');
CN:=doc.selectSingleNode('main/CN').Text;
Ct:=doc.selectSingleNode('main/Ct').Text;
Nodes:=doc.selectNodes('main/Place');
for i:=0 to Nodes.length-1 do
begin
 city:=Nodes.item[i].selectSingleNode('Addr/City')
end;


_Юрий   (2010-05-08 11:00:00) [2]


> Подскажите, пожалуйста, как прочитать информацию из "вложенных"
> деревьев.


var
 ChildNode: IXMLNode;
...

 for I := 0 to Node.ChildNodes.Count - 1 do
   begin
     ChildNode:=Node.ChildNodes[I];
     if ChildNode.NodeName = 'Place' then
       Reg:=ChildNode.Attributes['Reg']


Наверх

Титульная страница Поиск, карта сайта Написать письмо