Главная страница
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.045 c
2-1141394071
n_sch
2006-03-03 16:54
2006.03.19
Помогите разобраться с DBRichEdit !!!


15-1140725504
Piter
2006-02-23 23:11
2006.03.19
Обрушилась крыша на Басманном рынке


15-1140587632
Ega23
2006-02-22 08:53
2006.03.19
С Днём рождения! 22 февраля


2-1141127705
denis24
2006-02-28 14:55
2006.03.19
Зыкрытие всех форм созданных с главной


3-1138186334
alenamc
2006-01-25 13:52
2006.03.19
Проблема c BookMark