Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

парсим xml с помощью msxml_tlb.pas   Найти похожие ветки 

 
xmlBeginner   (2005-12-01 13:28) [0]

Есть подобный 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) [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<=Items.length-1) do begin
//title:=Items[i].selectSingleNode("title").text; если бы было так: <tick><title>sometext</title></tick> то значение было бы sometext
Items[i] //- вот пожалуйста делай с i-ым элементом что хочешь :)
inc(i);
end;
end;

uses comobj;
...
var
 XMLDoc:variant;
 MainNode         : variant;
 Items:variant;
 i:integer;
begin
XMLDoc:=CreateOleObject("Microsoft.XMLDOM");
XMLDoc.async:=false;
XMLDoc.load("test.xml");
MainNode:=XMLDoc.documentElement; //главный узел root
Items:=MainNode.selectNodes("tick");//получаем все объекты с одинаковым именем tick (массив)
i:=1;
while (i<=Items.length-1) do begin
//title:=Items[i].selectSingleNode("title").text; если бы было так: <tick><title>sometext</title></tick> то значение было бы sometext
Items[i] //- вот пожалуйста делай с i-ым элементом что хочешь :)
inc(i);
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.053 c
1-1139819308
Maverick
2006-02-13 11:28
2006.03.19
Сохранение пользовательских настроек


3-1138250784
Личность
2006-01-26 07:46
2006.03.19
Странный INSERT в БД


2-1141133176
sanich
2006-02-28 16:26
2006.03.19
Поставить курсор в таблице на определенное поле


15-1140863339
DVD
2006-02-25 13:28
2006.03.19
Есть ли такой переходничёк...


8-1129180890
SnakeAK
2005-10-13 09:21
2006.03.19
Поворот изображения в TImage