![]() |
|
|
#1
|
|||
|
|||
|
Доброй ночи всем)
щас возникла поблемка с работой по XML суть задачи: есть файл XML который меняется раз в 10 сек,храниться на сервере. структура файла примерно такая Код:
<code name="bibi" cvet="black" massa="500" kol="3" > <A name="текст" type="текст" txt="текст" /> <A name="текст" type="текст" txt="текст" /> <A name="текст" type="текст" txt="текст"/> <A name="текст" type="текст" txt="текст" /> </code> как мне считать все из <code> (только из него) name, cvet, massa, kol... пробовал вот так Код:
var
Filexml: IXMLDOMDocument;
coDoc: CoDomDocument;
s: string;
begin
FileXml:=CoDoc.Create;
FileXml.Set_async(false);
URL:='адресс';
FileXml.load(URL);
s:=FileXml.getElementsByTagName('code').item[0].attributes.item[2].text;но оно не работает ![]() подскажите пожалуйста |
|
#2
|
|||
|
|||
|
А где не работает?
А вообще, кажется сликом много лишнего даже здесь ![]() Вот пример моего прокета. Там атрибутов нет, но это не принципиально. Код:
procedure TUpdateInfo.LoadFromFile(AFileName: String);
var
ADoc : IXMLDocument;
begin
ADoc := TXMLDocument.Create(Nil);
ADoc.LoadFromFile(AFileName);
ADoc.Active := True;
Try
Parse(ADoc);
Finally
ADoc := Nil;
End;
end;
procedure TUpdateInfo.LoadFromStrings(AStrings: TStringList);
var
ADoc : IXMLDocument;
begin
ADoc := TXMLDocument.Create(Nil);
ADoc.XML.Assign(AStrings);
ADoc.Active := True;
Try
Parse(ADoc);
Finally
ADoc := Nil;
End;
end;
procedure TUpdateInfo.Parse(ADoc: IXMLDocument);
var
I : Integer;
ANode : IXMLNode;
begin
For I := 0 To ADoc.DocumentElement.ChildNodes.Count-1 Do
Begin
ANode := ADoc.DocumentElement.ChildNodes[i];
If ANode.NodeName = 'VersionNumber' Then
Begin
VersionNumber.Major := StrToIntDef(ANode.ChildNodes.FindNode('Major').Text,0);
VersionNumber.Minor := StrToIntDef(ANode.ChildNodes.FindNode('Minor').Text,0);
VersionNumber.Release := StrToIntDef(ANode.ChildNodes.FindNode('Release').Text,0);
VersionNumber.Build := StrToIntDef(ANode.ChildNodes.FindNode('Build').Text,0);
End;
If ANode.NodeName = 'ProgramName' Then
Begin
FProgramName := ANode.Text;
End;
If ANode.NodeName = 'ReleaseNotes' Then
Begin
FReleaseNotes.Text := ANode.Text;
End;
If ANode.NodeName = 'ModuleFileName' Then
Begin
FModuleFileName := ANode.Text;
End;
End;
end;Получить xml с сервера можно с помощью TIdHTTP... |
|
#3
|
|||
|
|||
|
Код:
s:=FileXml.getElementsByTagName('code').item[0].attributes.item[2].text;в этой строчке ошибка вылетает |
|
#4
|
|||
|
|||
|
Ты мой код вообще не смотрел???
У меня это будет выглядеть так: Код:
var
ANode : IXMLNode;
begin
ANode := ADoc.ChildNodes.FindNode('VersionNumber');
S := ANode.Attributes['name']; |