• 如何获取选定部分的HTML


    其实这个程序很简单,首先是如何获取选定部分的HTML,还记得这段吗:

      HTMLDoc := WebBrowser1.Document as IHTMLDocument2;
      SelectRange := HTMLDoc.selection.createRange() as IHTMLTxtRange;

    这样 SelectRange.htmlText 就是选择部分的HTML了。

    接着来实现 TrimBBSText() 函数,用于去除复制文字中的不可见乱码。

    复制代码
     1 {******************************************
     2  *
     3  *  TrimBBSText() 伪代码
     4  *
     5  ******************************************}
     6 function TrimBBSText(aBBSStr: String): String;
     7 var
     8   tmpStr, tmpSub: String;
     9   iCharPos: Integer;
    10 begin
    11   iCharPos := 1;
    12   // 从tmpStr的第一个字符到最后一个
    13   while (iCharPos <= Length(tmpStr)) do
    14   begin
    15     case tmpStr[iCharPos] of  // 检查当前字符
    16 
    17       '<':   {-HTML标记处理-}
    18         begin
    19           // 取标签内容
    20           tmpSub := HTML标签内容;
    21 
    22           if ( 是<BR> ) then
    23           begin
    24             Result := Result + #13#10;    // 换成换行符 CRLF = #13#10
    25             Continue;
    26           end;
    27 
    28           // 第一种隐藏方式,SPAN标签加 DISPLAY: none
    29           if ( 是<SPAN style="DISPLAY: none"> ) then
    30           begin
    31             // 跳过直到SPAN标签结束
    32             Continue;
    33           end;
    34 
    35           // 第一种隐藏方式,字体大小 font-size: 0px;
    36           if ( 是<FONT style="font-size: 0px; "> ) then
    37           begin
    38             // 跳过直到FONT标签结束
    39             Continue;
    40           end;
    41 
    42           // 其他标签处理
    43           Continue;
    44         end;
    45 
    46       '&':   {-转义字符处理-}
    47         begin
    48           tmpSub := 取转义字符内容;
    49           // &nbsp; - 空格
    50           if (tmpSub = '&nbsp;'then
    51           begin
    52             Result := Result + ' ';
    53             Continue;
    54           end;
    55 
    56           // 在这里处理其他标记,否则直接贴上转义字符
    57           Result := Result + tmpSub;
    58         end;
    59 
    60       else
    61         begin
    62           // 其他字符不处理
    63           Result := Result + tmpStr[iCharPos];
    64         end;
    65     end;
    66     Inc(iCharPos);
    67   end;
    68 end;
    复制代码

    实际上就是自己处理HTML标签,遇到 DISPLAY: none 和 font-size: 0px 的字符就给跳过。这样一来,剩下的就是真实可见部分了。另外要注意的是,HTML中有可能存在转义字符(最常见的是&nbsp;),处理方法见代码46行。

    另外,还可以用IHTMLDocument3接口去处理HTML标记并获取内容,只不过那个方法处理起来比这个循环还麻烦,以后有机会再演示一下。

    代码中只处理了 SPAN标签DISPLAY: none 和 FONT标签font-size: 0px 两种情况,如果要想程序通用,还需在代码中加入更多对不可见字符的识别。

  • 相关阅读:
    一文看懂Python匿名函数
    Python数据分析库之pandas,你该这么学!No.1
    探究以太坊 2.0 的分叉选择规则
    Plasma 设计综合列表
    从比特币到 Polkadot
    Ethereum Plasma MVP and Plasma Cash
    Java程序员进阶路线-高级java程序员养成
    matlab混合编程向导(vc,vb,.net...)
    matlab混合编程向导(vc,vb,.net...)
    matlab混合编程向导(vc,vb,.net...)
  • 原文地址:https://www.cnblogs.com/CodeGear/p/4537959.html
Copyright © 2020-2023  润新知