Parsowanie HTML-a, ale nie z pliku tylko z pola bazy danych

0

Witam. Potrzebuję zamienić HTML na zwykły tekst. Problem w tym, że nie mam pliku HTML, tylko pole typu text z bazy MS SQL. Szukałem jakiegoś darmowego parsera, który przyjąłby zwykły tekst zamiast TStream, ale nie znalazłem. Czy mógłby ktoś podpowiedzieć w jaki sposób zamienić HTML na zwykły tekst z pominięciem wszystkich tagów HTML bez użycia potoku, tylko po prostu zwykłego tekstu?

0

Na stronie http://www.scalabium.com/faq/dct0162.htm znalazłem takie rozwiązanie na usuwanie znaczników z kodu

function StripHTMLTags(const strHTML: string): string;
var
  P: PChar;
  InTag: Boolean;
  i, intResultLength: Integer;
begin
  P := PChar(strHTML);
  Result := '';

  InTag := False;
  repeat
    case P^ of
      '<': InTag := True;
      '>': InTag := False;
      #13, #10: ; {do nothing}
      else
        if not InTag then
        begin
          if (P^ in [#9, #32]) and ((P+1)^ in [#10, #13, #32, #9, '<']) then
          else
            Result := Result + P^;
        end;
    end;
    Inc(P);
  until (P^ = #0);

  {convert system characters}
  Result := StringReplace(Result, '&quot;', '"',  [rfReplaceAll]);
  Result := StringReplace(Result, '&apos;', '''', [rfReplaceAll]);
  Result := StringReplace(Result, '&gt;',   '>',  [rfReplaceAll]);
  Result := StringReplace(Result, '&lt;',   '<',  [rfReplaceAll]);
  Result := StringReplace(Result, '&amp;',  '&',  [rfReplaceAll]);
  {here you may add another symbols from RFC if you need}
end;
0
madmike napisał(a)

Na stronie http://www.scalabium.com/faq/dct0162.htm znalazłem takie rozwiązanie na usuwanie znaczników z kodu

Sprawdziłem ten kod - zbija całą zawartość w jeden ciąg, zamiast zamieniać
na #13 usuwa go. No nic - trzeba go przerobić, szkoda, że mam tak mało czasu :-(

0

Chyba jaja sobie robisz z tym czasem... dosłownie 10 sek roboty !

0
Opi napisał(a)

Chyba jaja sobie robisz z tym czasem... dosłownie 10 sek roboty !
No dobrze poświęciłem 10 sekund na poprawki...

zamień linię:

P := PChar(strHTML);

na

P := PChar(StringReplace(strHTML, '<br>', #13#10, [rfReplaceAll]));

zamień linię

#13, #10: ; {do nothing}

na

//#13, #10: ; {do nothing}
0
madmike napisał(a)
Opi napisał(a)

Chyba jaja sobie robisz z tym czasem... dosłownie 10 sek roboty !
No dobrze poświęciłem 10 sekund na poprawki...

zamień linię:

P := PChar(strHTML);

na

P := PChar(StringReplace(strHTML, '<br>', #13#10, [rfReplaceAll]));

zamień linię

#13, #10: ; {do nothing}

na

//#13, #10: ; {do nothing}

Dzięki :-) , nie śledzę tego forum w oczekiwaniu na to, że ktoś zrobi to za mnie - zrobiłem to samodzielnie :-) Nie zajęło mi to 10 sekund, bo jeszcze musiałem wprowadzić kilka innych poprawek, ale dałem radę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1