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

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

парсим xml с помощью msxml_tlb.pas [D6, Win2k]


xmlBeginner ©   (2005-12-01 13:28:00) 

Есть подобный xml-файл (test.xml):
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<bk kod="3377">
<tick period="107" codpl="453" bill="2" sum="1200"/>
<tick period="107" codpl="879" bill="3" sum="1300"/>
</bk>
</root>

Нужно достать из него числовые данные.
Из первой строки с числами все достается ок,

Обрабатываем его так:
Procedure TForm1.Button1Click(Sender: Tobject);
var coDoc : CoDOMDocument;
Doc : IXMLDOMDocument;
r : IXMLDOMElement;
Node : iXMLDOMNode;
xm : Ixmldomnamednodemap;
s1 : string;

begin
Doc := coDoc.Create;
Doc.Set_async(false);
Doc.load('c:\test.xml');
r:=Doc.Get_documentElement;
Node:= r.SelectSingleNode('//tick');
xm:=Node.attributes;
s1:='';

Node:=xm.GetNamedItem('period');
s1:=s1+Node.text+' ';
Node:=xm.GetNamedItem('codpl');
s1:=s1+Node.text+' ';
Node:=xm.GetNamedItem('bill');
s1:=s1+Node.text+' ';
Node:=xm.GetNamedItem('sum');
s1:=s1+Node.text;
end;

Получили // s1 = '107 453 2 1200'

Как перейти ко второй строчке?


VirEx   (2005-12-03 19:28:00) [1]

парсить XML документы можно множеством способов (в JavaScript делая объект xml parsera с помощью COM технологии, можно сделать шаблон xsl, можно парсить хоть в php если установлено соответственное расширение, хотя в PHP 5.1.0 это встроенно в ядро, кстати мой сайт http://winconsul.kladovka.net.ruгенерится из XML документов :) и на нём же мой проект в котором плагин Options использует XML парсер :) ), я недавно отписывался в http://www.inetlinks.realsofts.com/forum/viewtopic.php?t=173&sid=886c642b9ee59f8af3d84b59eabc6163по этому поводу, а в данном случае вот такой пример:
(кстати этот парсер является COM объектом поэтому я покажу два метода, с COM технологией и обычный метод)
1) парсим с помощью методов msxml парсера:
uses msxml;
...
var
 CoDoc: CoDOMDocument;
 XMLDoc:DOMDocument;
 MainNode         : IXMLDOMElement;
 Items:IXMLDOMNodeList;
 i:integer;
begin
XMLDoc:=CoDoc.Create;
XMLDoc.async:=false;
XMLDoc.load('test.xml');
MainNode:=XMLDoc.documentElement; //главный узел root
Items:=MainNode.selectNodes('tick');//получаем все объекты с одинаковым именем tick (массив)
i:=1;
while (i


Наверх

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