На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Получить уровень элемента IHTMLElement
    У UncleBob нашел отличный пример, основные моменты по нему ясны.
    ExpandedWrap disabled
      CComBSTR bstrCode = _T("<html><body><H1>Hello world!</H1></body></html>");
          CComPtr <IHTMLDocument2> pIHTMLDocument2;
          if (S_OK == pIHTMLDocument2.CoCreateInstance (CLSID_HTMLDocument))
          {
              LPSAFEARRAY psa = ::SafeArrayCreateVector (VT_VARIANT, 0, 1);
              if (psa)
              {
                  VARIANT *pv;
                  if (S_OK == ::SafeArrayAccessData (psa, (LPVOID*)&pv))
                  {
                      pv->vt = VT_BSTR;
                      pv->bstrVal = bstrCode;
                      ::SafeArrayUnaccessData (psa);
                      if (S_OK == pIHTMLDocument2->write (psa))
                      {
                          CComPtr <IHTMLElementCollection> pIHTMLElementCollection;
                          if (S_OK == pIHTMLDocument2->get_all (&pIHTMLElementCollection))
                          {
                              CComPtr <IUnknown> pIUnknownEnum;
                              if (S_OK == pIHTMLElementCollection->get__newEnum (&pIUnknownEnum))
                              {
                                  CComQIPtr <IEnumVARIANT> pIEnumVARIANT = pIUnknownEnum;
                                  if (pIEnumVARIANT)
                                  {
                                      pIEnumVARIANT->Reset();
                                      VARIANT var;
                                      while (S_OK == pIEnumVARIANT->Next (1, &var, NULL))
                                      {
                                          if (var.vt == VT_DISPATCH)
                                          {
                                              CComQIPtr <IHTMLElement> pIHTMLElement = var.pdispVal;
                                              if (pIHTMLElement)
                                              {
                                                  CComBSTR bstrTag;
                                                  pIHTMLElement->get_tagName (&bstrTag);
                                                  BSTR bszHTML = NULL;
                                                  pIHTMLElement->get_innerHTML(&bszHTML);
                                                  BSTR bszTEXT = NULL;
                                                  pIHTMLElement->get_innerText(&bszTEXT);
                                              }
                                          }
                                          ::VariantClear (&var);
                                      }
                                  }
                              }
                          }
                      }
                  }
                  ::SafeArrayDestroy (psa);
              }
          }

    Проблема вот в чем, при переборе в цикле выводятся все элементы и получаем следующее:
    <html><body><H1>Hello world!</H1></body></html>
    <body><H1>Hello world!</H1></body>
    <H1>Hello world!</H1>
    Hello world!


    Вообще мне нужно получить только конечный текст, ну и параллельно знать путь к нему (к pIHTMLElement), т.е. кто стоит выше, и количество детей у этого элемента.
    Можно пропарсить руками, но мне хочется нормально сделать, наверняка есть методы встроенные.
    Сообщение отредактировано: MaIron -
      Сделал через get_sourceIndex(). Записываю указатели на все элементы в массив, потом при необходимости высчитываю всех родителей.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0309 ]   [ 16 queries used ]   [ Generated: 20.04.24, 01:59 GMT ]