|
#1
|
|||
|
|||
проблемка с XML
Доброй ночи всем)
щас возникла поблемка с работой по 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']; |