现有个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]
请大家帮忙看看有什么办法可以解决
<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]
请大家帮忙看看有什么办法可以解决
解决方案 »
- 急,unit與form如何移到另外一個工程里
- 超级难题,高手请进,chart中Tools工具删除的问题?
- 求救,根据4个edit的值做sql查询(在线等)
- 求高手解决,如何读取BMP图片,转换成二进制的数据流文件BIN?
- 鼠标的消息处理
- 兄弟们:有没有谁了解或在 [杭州领先科技] 上班
- 用MS SQL的视图功能做出来的几个表的连接是内连接还是外连接
- 请问如何将*.jpg文件插入paradox数据表中。
- 谁知道哪有《Rational Rose从入门到精通》和《UML参考手册》这两本电子书下载?我给22分
- 有谁知道这个错误:OLE error 800A03EC?
- 查找重复值
- delphi 数据库连接请教
就是删除classid为"11111111-1111-1111-1111-111111111111"的<object>到</object>之间的字符,跟行数不应该有什么逻辑关系的不知道我这样说是否清楚
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;
用DOM的方式我也想过,不过由于节点不确定,有可能在<body>节点,<table>节点,<td>节点,也有可能在其他节点,所以实现起来比较复杂的(抱歉我的问题没有表示清楚)
遍历一遍所有节点就行了!
大学时学过深度或者广度遍历,写一个就行了 ,
当 if node.NodeName= object then
begin
//进行上面处理
end;
遍历算法 就是一递归 或者循环
当 if node.NodeName= 'object' then
begin
//进行上面处理
end;
下班了,有问题晚上再看
从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;
通过拆分字符串方式已经实现了,现把代码贴出来
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;