Повис короче вообще. Пытаюсь спарсить инфу с http://steamcommunity.com/groups/createlobby/memberslistxml/ из тегов <steamid64>. Code: XMLDocument2.LoadFromFile('http://steamcommunity.com/profiles/'+XMLDocument1.DocumentElement.ChildNodes['members'].ChildNodes['steamID64'].Text+'/?xml=1'); Соответственно он тащит только первый. Видел ещё свойство nextSibling, но не очень понял как оно работает, может с его помощью может вытащить следующие теги?
Code: var s : TStringList; //здесь результат tmp : string; begin tmp := XMLDocument2.LoadFromFile('...'); s := TStringList.Create(); while pos('<steamid64>', tmp) > 0 do begin delete(tmp, 1, pos('<steamid64>', tmp) + length('<steamid64>')-1); s.Add(copy(tmp, 1, pos('</steamid64>', tmp)-1)); end; ShowMessage(s.Text); //вывод результата end;
Спасибо за полный код, но могли бы просто тункть, я бы сам сделал У меня к вам вопрос такой, компилятор ругается на строку Code: tmp:=XMLDocument1.LoadFromFile('http://steamcommunity.com/groups/createlobby/memberslistxml/'); , а именно Code: [Error] Unit1.pas(85): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter' Пробовал менять тип переменной, но все так же
замени Code: tmp := XMLDocument2.LoadFromFile('...'); на Code: XMLDocument2.LoadFromFile('...'); tmp := XMLDocument2.XML.Text; просто не пользовался данным компонентом, код писал на коленке. не проверял, но должен работать
да вы упоротые что ли? самое простое: Code: uses ..., MSXML, ...; procedure parse(); var XMLDoc: IXMLDOMDocument; Nodes: IXMLDOMNodeList; .... begin XMLDoc:= CoDOMDocument.Create; try XMLDoc.Async:= False; XMLDoc.Load('http://steamcommunity.com/groups/createlobby/memberslistxml/'); Nodes:= XMLDoc.GetElementsByTagName('steamID64'); for i:= 0 to Nodes.Length-1 do begin ShowMessage( (Nodes.Item[I] as IXMLDOMNode).Text ); end; finally XMLDoc:= nil; end; end;
да хотя бы тем, что строится dom дерево, к элементам которого можно получить вполне удобный доступ без этой херни с pos\delete\copy, тем, что при добавлении какого либо атрибута к тегу <steamID64>, например <steamID64 id="1"> значения все так же будут парситься без переделки кода