Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2013, 16:54   #1
Crossfire
Пользователь
 
Регистрация: 12.04.2010
Сообщений: 12
По умолчанию Парсинг одинаковых тегов из хмл

Прикрутил парс хмл тегов, если теги одинаковые соответственно он парсить только первый тег.
Как парсить все одинаковые теги?
Код:
XMLDocument2.LoadFromFile('http://steamcommunity.com/profiles/'+XMLDocument1.DocumentElement.ChildNodes['members'].ChildNodes['steamID64'].Text+'/?xml=1');
Тобиш мне нужно спарсить все теги <steamid64>
Crossfire вне форума Ответить с цитированием
Старый 18.07.2013, 17:11   #2
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию

это что ты там от стима парсить собрался?
IvaniuS вне форума Ответить с цитированием
Старый 18.07.2013, 17:23   #3
Crossfire
Пользователь
 
Регистрация: 12.04.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от IvaniuS Посмотреть сообщение
это что ты там от стима парсить собрался?
Парсю ники, хмл с которого беру их, самим стимом в открытом доступе предоставлены.
Мошенничества никакого

Последний раз редактировалось Crossfire; 18.07.2013 в 17:29.
Crossfire вне форума Ответить с цитированием
Старый 18.07.2013, 18:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я думаю вам не парсить надо, а работать методами XMLDocument.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.07.2013, 22:11   #5
Crossfire
Пользователь
 
Регистрация: 12.04.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
я думаю вам не парсить надо, а работать методами XMLDocument.
Пытаюсь работать с nextSibling, ставлю условие
Код:
smemo1.text:=w ;
if XMLdocument2.DocumentElement.childnodes['members'].childnodes['steamid64'].nextsibling['steamid64'] then
XMLDocument2.LoadFromFile('http://steamcommunity.com/profiles/'+XMLDocument1.DocumentElement.ChildNodes['members'].ChildNodes['steamID64'].Text+'/?xml=1');
w:=XMLdocument2.DocumentElement.childnodes['members'].childnodes['steamid64'].text     ;
w:= XMLDocument2.DocumentElement.ChildNodes['steamID'].Text;
Он меня в условие тыкает уже после компиля при нажатии на баттон.
Вы только сильно не смейтесь, я все пытаюсь все четко по книгам и статьям делать
Crossfire вне форума Ответить с цитированием
Старый 19.07.2013, 09:36   #6
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

xpath читаем
и будет
ids:=XML.selectNodes('members/steamid64');
for i:=1 to ids.length do
ids.item(1).text
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 19.07.2013, 16:10   #7
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

Вот код с моего проекта, без использования компонента TXMLdocument.
А по поводу классов IXMLDOM* погуглите, смотря какую версию Делфы используете.
Я работаю с ХЕ3, там просто подключить модуль Winapi.msxml.

Код:
procedure TvdVisualFilter.BuildFilter(aXML: string);
var XMLDoc: IXMLDOMDocument;
    XMLError: IXMLDOMParseError;
    Root: IXMLDOMElement;
    Attr: IXMLDOMNode;
    i, j: Integer;
    vPage: TvdPage;
    vCF: TvdCustomFilter;
begin
  if Length(FPages) > 0 then
    for i := Low(FPages) to High(FPages) do
    begin
      TTabSheet(FPages[i].Parent).PageControl := nil;
      FreeAndNil(FPages[i]);
    end;
  SetLength(FPages, 0);

  XMLDoc := CoDOMDocument.Create;
  try
    XMLDoc.Async := False;
    XMLDoc.loadXML(aXML);
    XMLError := XMLDoc.ParseError;
    if XMLError.errorCode = 0 then
    begin
      Root := XMLDoc.DocumentElement;

      Attr := Root.attributes.getNamedItem('WherePosition');
      FWherePosition := '~Where~';
      if Attr <> nil then
        FWherePosition := Attr.nodeValue;

      with Root.ChildNodes do
        for i := 0 to Length - 1 do
        begin
          vPage := AddPage;
          // Название
          Attr := item[i].attributes.getNamedItem('Caption');
          if Attr <> nil then
            vPage.Caption := Attr.nodeValue
          else
            vPage.Caption := 'Сторінка' + IntToStr(i);
          // Длина лабелов
          Attr := item[i].attributes.getNamedItem('LabelsWidth');
          if Attr <> nil then
            vPage.LabelsWidth := StrToIntDef(Attr.nodeValue, 200)
          else
            vPage.LabelsWidth := 200;

          with item[i].childNodes do
            for j := 0 to length - 1 do
            begin
              vCF := CreateFilter(vPage, item[j]);
              if vCF <> nil then
              begin
                vCF.CaptionWidth := vPage.LabelsWidth;
                vCF.Parent := vPage;
                vPage.AddFilter(vCF);
              end;
            end;
        end;
    end;
  finally
    Root := nil;
    XMLError := nil;
    XMLDoc := nil;
  end;
end;
Нет невыполнимых задач, всё дело времени...
D-mon вне форума Ответить с цитированием
Старый 19.07.2013, 20:04   #8
Tip.the.besT
------------------
Пользователь
 
Регистрация: 15.08.2011
Сообщений: 78
По умолчанию

Код:
var
list:tstringlist;
s:string;//здесь xml документ
begin
list:=tstringlist.create;

while pos('<steamid64>',s)<>0 then begin
delete(s,1,pos('<steamid64>',s)+10);
list.add(copy(s,1,pos('</steamid64>',s)-1));
end;

list.savetofile('id.txt');
list.free;
end;
C YBA}|{EH|/|EM Tip.the.besT

Последний раз редактировалось Tip.the.besT; 19.07.2013 в 20:19.
Tip.the.besT вне форума Ответить с цитированием
Старый 19.07.2013, 20:14   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Tip.the.besT, все хорошо на вид.
но мой вам совет, откройте для себя PosEx.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.07.2013, 20:21   #10
Tip.the.besT
------------------
Пользователь
 
Регистрация: 15.08.2011
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Tip.the.besT, все хорошо на вид.
но мой вам совет, откройте для себя PosEx.
Не могли бы вы объяснить в чём преимущества PosEx над pos, delete, copy?
C YBA}|{EH|/|EM Tip.the.besT
Tip.the.besT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Облако тегов Abuhamed PHP 2 30.03.2012 13:00
Дан целочисленный массив размера N, содержащий ровно два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номе Alexar Makken Паскаль, Turbo Pascal, PascalABC.NET 1 23.12.2011 22:07
Колличество тегов Furyon PHP 1 20.04.2011 17:30
Нужно зайти в узлы хмл-файла в делфи Driver_09 Помощь студентам 0 16.06.2010 14:08
TXMLTransformProvider выгрузка данных в хмл MAcK Общие вопросы Delphi 1 15.04.2009 22:00