zoukankan      html  css  js  c++  java
  • 如何获取选定部分的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 两种情况,如果要想程序通用,还需在代码中加入更多对不可见字符的识别。

  • 相关阅读:
    oracle 处理找被删掉且提交了事务的数据
    java去除下划线并首字母大写
    假数据仓库-常见数据枚举(日期、月份、周几、星期几,前导零、Excel 列号)
    自然语言处理标注工具——Brat(安装、测试、使用)
    判断当前点击位置在不在某个区域内
    java调用C#程序集
    UE使用EditorUtilityWidget完成简单的编辑器内工具
    CodeForces 230B
    mac中安装启动使用jmeter步骤
    Ubuntu中samba配置过程
  • 原文地址:https://www.cnblogs.com/CodeGear/p/4537959.html
Copyright © 2011-2022 走看看