现有个html文件,里面大概内容如下:
<html>
<body>
<table>
......
</table>
<object>
    classid="11111111-1111-1111-1111-111111111111" id=object
</object>
<object>
    classid="22222222-2222-2222-2222-222222222222" id=object
</object>
<object>
    classid="33333333-3333-3333-3333-333333333333" id=object
</object>
<body>
</html>要求把classid="11111111-1111-1111-1111-111111111111"的Object从文件中去掉,结果如下:
<html>
<body>
<table>
......
</table>
<object>
    classid="22222222-2222-2222-2222-222222222222" id=object
</object>
<object>
    classid="33333333-3333-3333-3333-333333333333" id=object
</object>
<body>
</html>
[/code]
请大家帮忙看看有什么办法可以解决

解决方案 »

  1.   

    读到memo中,然后循环lines,找到符合条件的那一行删除之,然后在保存成文件
      

  2.   


    就是删除classid为"11111111-1111-1111-1111-111111111111"的<object>到</object>之间的字符,跟行数不应该有什么逻辑关系的不知道我这样说是否清楚
      

  3.   

    时间有限,做了个简单例子,条件控制自己加上,准备接分
    procedure TForm1.Button2Click(Sender: TObject);
    var
      XMLDoc : IXMLDocument ;
      node,object_node,del_node,par_node : IXMLNode;
    begin
      XMLDoc := TXMLDocument.Create(nil);
      XMLDoc.Active := True;
      XMLDoc.LoadFromFile('test.html');//你的存储文件名
      node := XMLDoc.ChildNodes.FindNode('html');
      node := node.ChildNodes.FindNode('body');
      object_node := node.ChildNodes.FindNode('object');
      while object_node<>nil do
      begin
         if Pos('11111111-1111',object_node.Text)>0 then
         begin
            del_node := object_node ;
            object_node := object_node.NextSibling;
            node.ChildNodes.Remove(del_node)  ;
         end
         else
         object_node := object_node.NextSibling;  end;
      XMLDoc.SaveToFile('test.html');
    end;
      

  4.   


    用DOM的方式我也想过,不过由于节点不确定,有可能在<body>节点,<table>节点,<td>节点,也有可能在其他节点,所以实现起来比较复杂的(抱歉我的问题没有表示清楚)
      

  5.   

    那你循环啊!
    遍历一遍所有节点就行了!
    大学时学过深度或者广度遍历,写一个就行了 ,
    当 if node.NodeName= object then
    begin
     //进行上面处理
    end;
    遍历算法 就是一递归 或者循环
      

  6.   

    上面写错了 应该这样写
    当 if node.NodeName= 'object' then 
    begin 
    //进行上面处理 
    end; 
    下班了,有问题晚上再看
      

  7.   

    我自己实现过一个函数 gettag(s,sbegin,send:string;var b,e:int):boolean
    从s里查找sbegin,如果没有找到就返回false,否则再在此位置开始找send,如果没有找到就返回false
    否则就返回sbegin、send的位置s:=html;
    sout:='';
    while gettag(s,'<object>','</object>', b,e) do
    begin
      sub:=copy(s,b,e-b+1);
      if pos(sub,'1111111...')<1 then
        sout:=sout+copy(s,1,e+8)
      else
        sout:=sout+copy(s,1,b-1);
      delete(s,1,e+8);
    end;
      

  8.   


    通过拆分字符串方式已经实现了,现把代码贴出来
    function TForm2.DeleteStr(S, DelStr: string): string;
    var
      PreHtml, PreReserveHtml, NextHtml: string;
      iPos: Integer;
    begin
      iPos := Pos(DelStr, s);
      while iPos > 0 do
      begin
     //取前段
        PreHtml := Copy(s, 1, ipos - 1);
     //取后段
        NextHtml := Copy(s, iPos, Length(s));
    //反转字符串
        PreReserveHtml := StrUtils.ReverseString(PreHtml);
        Delete(PreReserveHtml, 1, Pos('tcejbo<', PreReserveHtml) + 6);
        PreHtml := ReverseString(PreReserveHtml);
        Delete(NextHtml, 1, Pos('</object>', NextHtml) + 8);
        s := PreHtml + NextHtml;
        iPos := Pos(DelStr, s);
      end;
      Result := s;
    end;