Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
2-1141574177
Музыкант
2006-03-05 18:56
2006.03.19
Как написать пианино?


15-1140680802
McSimm
2006-02-23 10:46
2006.03.19
Конкурсы и призы, азарт, соревновательность и интерес.


15-1140721369
ArtemESC
2006-02-23 22:02
2006.03.19
Иконки Delphi...


4-1135418360
Arazel
2005-12-24 12:59
2006.03.19
Определить что изменился файл? Во всей Файловой системе?


2-1141244051
redlord
2006-03-01 23:14
2006.03.19
грамматное решение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский