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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2014, 13:55   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию IHTMLElement. Получить список атрибутов тега

Всем доброго. использую IHTMLElement для получения данных тега. Хочу получить список атрибутов. В MSDN описан метод getAttribute, но ему нужно задавать имя атрибута для его получения, а мне хочется получить количество атрибутов тега и после в цикле по ним пройтись.

Вопрос: Есть ли у MSHTML возможность пройтись по атрибутам циклом, или getAttribute это предел возможности этого парсера микрософтовского?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2014, 23:32   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,466
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Старый 13.06.2014, 10:53   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

За наводку спс, но я чего-то запутался.
У IHTMLAttributeCollection есть метод item, который судя по хелпу принимает один параметр - имя аттрибута. А в примере их два:
Цитата:
pAttrColl->item(&vACIndex, &pItemDisp);
Как такое может быть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2014, 11:20   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

нормального нет, но есть это, или более старая функция: geElementsByTagName и перебор в цикле.
Человек_Борща вне форума Ответить с цитированием
Старый 13.06.2014, 11:52   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,466
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
У IHTMLAttributeCollection есть метод item, который судя по хелпу принимает один параметр - имя аттрибута.
Аргументов два - первый это VARIANT в котором индекс, второй это указатель на указатель результата.

Здесь пример на С++: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Старый 13.06.2014, 11:54   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.06.2014, 12:04   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
waleri
Блин, точно. Затупил еще раз. Все получилось, спасибо.
Цитата:
Человек_Борща
Ну на IE 9-ку пока расчитывать не могу.
В любом случае ссылка Валеры вывела в нужное русло после того как понял как правильно получать интерфейсы.
На всякий случай прикрепляю примерчик, может кто еще ищет как это делается в Делфи:
Код:
  
var nn:OleVariant;j,i,cnt,cntattr:integer; p:Pointer; domnode:IHTMLDOMNode; 

   attrs:IHTMLAttributeCollection;
   atr:IHTMLDOMAttribute;
   aName,aVal:String;
  begin
    if Elem=nil then begin
     Collection:=IHTMLElementCollection(Document.body.all);
    end;
    cnt:=Collection.length;
    for i:=0 to cnt-1 do begin
     if Collection.item(i,0).QueryInterface(IID_IHTMLElement,p)=S_OK then begin
      Elem:=IHTMLElement(p);
      if elem.QueryInterface(IID_IHTMLDOMNode,p)=S_OK then begin
        domnode:=IHTMLDOMNode(p);
        ...:=domnode.nodeName;
        ...:=Elem.innerHTML;
        //****************************** Attributes *********************************************
          p:=domnode.attributes;
          if p<>nil then begin
           if domnode.attributes.QueryInterface(IID_IHTMLAttributeCollection,p)=S_OK then begin
            attrs:=IHTMLAttributeCollection(p);
            cntattr:=attrs.length;
            for j:=0 to cntattr-1 do begin
              nn:=j;
              if attrs.item(nn).QueryInterface(IID_IHTMLDOMAttribute,p)=S_OK then begin
                atr:=IHTMLDOMAttribute(p);
                if not VarIsNull(atr.nodeValue) then begin
                  aName:=atr.nodeName;
                  aVal:=trim(VarToStrDef(atr.nodeValue,''));
                  if aVal<>'' then begin
                     ListBox.Items.Append(aName+'='+aVal);
                  end;
                end;
              end;
            end;
           end;
          end;
        //***************************************************************************************
       end;
     end;
    end;
  end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить список пользователей Snejok820 Общие вопросы C/C++ 0 25.04.2013 17:04
Получить содержание нажатого тега p Rost93 JavaScript, Ajax 2 12.06.2012 20:43
IHTMLElement iBlooDex Visual C++ 0 18.11.2011 12:46
Преобразовать IHTMLElement в IHTMLDocument h4muk Работа с сетью в Delphi 3 24.08.2011 01:19
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание Zigfried Помощь студентам 2 04.10.2010 20:29