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