C# 如何编辑所有特殊html标记的属性(如a)
我正在尝试使用c#编辑所有特殊html标记(如a)的属性。例如,我想更改此代码:C# 如何编辑所有特殊html标记的属性(如a),c#,asp.net,html,c#-4.0,C#,Asp.net,Html,C# 4.0,我正在尝试使用c#编辑所有特殊html标记(如a)的属性。例如,我想更改此代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>U
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
</head>
<body>
<a href="http://google.com"></a>
<a href="http://gmail.com"></a>
</body>
</html>
而s
是我的html流
有人知道我怎么做吗
我想把这段代码放在ASP.NET中看看
什么是Html敏捷包(HAP)
这是一个敏捷的HTML解析器,它构建读/写DOM并支持纯XPATH或XSLT(您实际上不必理解XPATH或XSLT就可以使用它,不用担心……)。它是一个.NET代码库,允许您解析“web外”HTML文件。解析器对“真实世界”格式错误的HTML非常宽容。对象模型与System.Xml非常相似,但适用于HTML文档(或流)
下载包含几个示例项目-查看它们以了解如何操作HTML文件。将runat=“server”放在标记中,如下所示:
<a runat="server" ID="linkGmail" ....></a>
您只需搜索每个
http://
和https://
并根据需要更改它们
您应该使用Microsoft.VisualBasic.Strings
函数
阅读有关Microsoft.VisualBasic.Strings函数的详细信息
下面是一个示例代码:
string s; //store html content in this variable.
int i = Microsoft.VisualBasic.Strings.InStr(1, s.ToLower(), "http://");
int j1 = Microsoft.VisualBasic.Strings.InStr(i+1,s.ToLower(),"\"");
int j2 = Microsoft.VisualBasic.Strings.InStr(i+1,s.ToLower(),"'");
int j;
if ((j1 < j2) && (j1 > i))
j = j1;
else
j = j2;
s = Microsoft.VisualBasic.Strings.Mid(s,1,i-1) + "http://www.go.go/default.aspx?url=" + Server.UrlEncode(Microsoft.VisualBasic.Strings.Mid(s,i,j-i)) + Microsoft.VisualBasic.Strings.Mid(s,j);
字符串s//将html内容存储在此变量中。
int i=Microsoft.VisualBasic.Strings.InStr(1,s.ToLower(),“http:/”;
int j1=Microsoft.VisualBasic.Strings.InStr(i+1,s.ToLower(),“\”);
int j2=Microsoft.VisualBasic.Strings.InStr(i+1,s.ToLower(),“');
int j;
如果((j1i))
j=j1;
其他的
j=j2;
s=Microsoft.VisualBasic.Strings.Mid(s,1,i-1)+”http://www.go.go/default.aspx?url=“+Server.UrlEncode(Microsoft.VisualBasic.Strings.Mid(s,i,j-i))+Microsoft.VisualBasic.Strings.Mid(s,j);
此代码将把第一个http://
表单的实际地址更改为您想要的内容
您可以创建一个while循环并重复此操作以替换每个链接。(请记住排除http://www.go.go/default.aspx?
请注意,我的代码可能需要一些小的更改(例如可能是i+1
而不是i
或类似的东西!)
编辑:这种方式存在一些问题,例如,它不支持内部链接。您应该搜索标记(例如
).我知道它不是C#,但也许jQuery更适合您的需要?不过,看起来您需要保存html内容。在这种情况下,请按照建议使用html功能包below@Bertvan:请参阅,我想从我的网站创建所有链接。然后将用户重定向到原始网站。@ahmadali shafiee:它不需要asp.net,这只是你普通的.net类库。@Oded:我如何使用HTML Agility Pack来实现这一点?@Ahmadalishafie-看一下下载中的示例。@Oded:但是示例是错误的!@Ahmadalishafie-你需要更仔细地阅读我发布的内容。当你下载HTML Agility Pack时,在下载中,有一个示例Visual Studio项目做着各种各样的事情。看看它们,阅读它们,从中学习。你不明白我说的是什么,你试图解析HTML并替换所有出现的属性?我以为你的意思是你想替换ASPX页面中代码中链接的href属性。不是这样吗?不,我正在下载html文件(网页)在流
中,然后我想更改流
链接的href
值。我想开发一个类似PHProxy
的项目,但使用.net
。我认为有更好的方法代替文本处理。我认为最好的方法是Oded的答案,但你说你不能使用该库。不!我是识别我的Html敏捷包问题
<a runat="server" ID="linkGmail" ....></a>
linkGmail.Attributes["href"] = "http://go.go/default.aspx?url=http://gmail.com";
string s; //store html content in this variable.
int i = Microsoft.VisualBasic.Strings.InStr(1, s.ToLower(), "http://");
int j1 = Microsoft.VisualBasic.Strings.InStr(i+1,s.ToLower(),"\"");
int j2 = Microsoft.VisualBasic.Strings.InStr(i+1,s.ToLower(),"'");
int j;
if ((j1 < j2) && (j1 > i))
j = j1;
else
j = j2;
s = Microsoft.VisualBasic.Strings.Mid(s,1,i-1) + "http://www.go.go/default.aspx?url=" + Server.UrlEncode(Microsoft.VisualBasic.Strings.Mid(s,i,j-i)) + Microsoft.VisualBasic.Strings.Mid(s,j);