![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение данных из 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']