Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Текст тега, за исключением текста вложенных тегов 
V
    Опции темы
drkot
Дата 26.3.2011, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: нет
Всего: 8



Не знаю как это правильно назвать (может по этой причине поиск не дал результатов...), поэтому объясняю проблему на пальцах:
Код

<table>
    <tr>
        <td>1</td>
        <td>2</td>
    </tr>
    <tr>
------------------------------------------------------------
        <td>3<table>
            <tr>
                <td>31</td>
                <td>32</td>
            </tr>
            <tr>
                <td>33</td>
                <td>34</td>
            </tr>
        </table>
        </td>
------------------------------------------------------------
        <td>4</td>
    </tr>
</table>


Код

var
AElement: IHTMLElement
...

s:=AElement.innerText; 


к выделенному тегу дает результат = 331323334
тоесть возвращается текст и всех дочерних элементов

а нужно получить только то, что содержится внутри тега, тоесть = 3.

вот как это выглядит в жизни
user posted image

Может кто подскажет технологию ... 




--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
cat512
Дата 26.3.2011, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 3
Всего: 15



Вместо IHtmlElement, должен работать IHTMLDOMNode.NodeValue 
PM MAIL   Вверх
drkot
Дата 27.3.2011, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: нет
Всего: 8



Это уже проходили...
Цитата(cat512 @  26.3.2011,  22:26 Найти цитируемый пост)
IHTMLDOMNode.NodeValue 
 = Null






--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
cat512
Дата 28.3.2011, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 3
Всего: 15



На, я проверил на твоём примере, должно работать. А вообще, так криво html не верстают.  Обычно текст на смешивают с другими DOM- элементами, и стараются идентиф. элементы к которым нужен доступ.
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  El: IHTMLElement2;
  Node, Child: IHTMLDomNode;
  Doc: IHTMLDocument2;
  Collection: IHTMLElementCollection;
  I, J: integer;
  C: IHTMLDOMChildrenCollection;
begin
  WebBrowser1.Navigate('file://g:/test.html');
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
  Doc := WebBrowser1.Document as IHTMLDocument2;
  El := Doc.body as IHtmlElement2;
  Collection := El.getElementsByTagName('TD');
  for I := 0 to Collection.length - 1 do
  begin
    Node := Collection.Item(I, 0) as IHTMLDomNode;
    if not VarIsNull(Node) and (Node.nodeType = 1) then
    begin
      if Node.hasChildNodes then
      begin
        C := (Node.childNodes) as IHTMLDOMChildrenCollection;
        for J := 0 to C.length - 1 do
        begin
          Child := C.item(J) as IHtmlDomNode;
          if Child.nodeName = '#text' then
          begin
            ShowMessage((Child as IHTMLDomTextNode).data);
          end;
        end;
      end;
    end;
  end;

end;


PM MAIL   Вверх
drkot
Дата 28.3.2011, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: нет
Всего: 8



cat512,  Спасибо, интересное решение...
Буду думать как его прикрутить в моем контексте.
так как я не пользуюсь коллекцией по тегу, а рекурсивно обхожу дерево, и составляю структуру документа.
И, что логично, условие 
Код

Child.nodeName = '#text'
 в моем контексте никогда не выполняется...


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
cat512
Дата 28.3.2011, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 3
Всего: 15



Даже если не пользуешься колекцией по тегу, то при рекурсивном обходе, ты всегда можешь проверить условие htmlElement.tagName = 'TD', ну а после этого пивести hnmlElement к htmlDomNode и получить колекцию дочерних элементов не проблема
PM MAIL   Вверх
drkot
Дата 31.3.2011, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: нет
Всего: 8



Спасибо, разобрался.



--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.