Форум: "Сети";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Внизпарсим 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c