如何编辑所有特殊html标记的属性(如)
本文关键字:html 属性 何编辑 编辑 | 更新日期: 2023-09-27 18:22:30
我正在尝试使用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>Untitled Page</title>
</head>
<body>
<a href="http://google.com"></a>
<a href="http://gmail.com"></a>
</body>
</html>
到此:
<!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://go.go/default.aspx?url=http://google.com">
</a><a href="http://go.go/default.aspx?url=http://gmail.com"></a>
</body>
</html>
这意味着我想在<a>
中附加href
的值
我尝试了LinqToXML,但它不起作用,因为HTML不是有效的XML(因为DOCTYPE标记)
这是我的代码:
XDocument xmlFile = XDocument.Load(s);
var query = from c in xmlFile.Elements("html").Elements("body").Elements("a")
select c;
foreach (XElement book in query)
{
string atr = book.Attribute("href").Value;
book.Attribute("href").Value = "http://ahmadalli.somee.com/default.aspx?url=" + atr;
}
xmlFile.Save(s);
CCD_ 3是我的html流。
有人知道我该怎么做吗?
我想在ASP.NET
看看HTML敏捷包。
Html敏捷包(HAP)究竟是什么?
这是一个敏捷的HTML解析器,它构建了一个读/写DOM,并支持普通的XPATH或XSLT(你实际上不需要理解XPATH也不需要XSLT就可以使用它,别担心…);出网";HTML文件。解析器对";真实世界";格式错误的HTML。对象模型与System.Xml非常相似,但适用于HTML文档(或流)。
下载包含几个示例项目-请查看它们,了解如何操作HTML文件。
您可以简单地搜索每个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);
此代码将把第一个http://
形式的实际地址更改为您想要的内容。
您可以创建while循环并重复此操作以替换每个链接。(记得排除http://www.go.go/default.aspx?
!
请注意,我的代码可能需要一些小的更改。(可能是i+1
而不是i
或类似的东西!)
编辑:这种方式有一些问题,例如,它不支持内部链接。您应该搜索标签(例如<a
)并处理其中的内部链接(直到>
)
将runat="server"放入标签中,如下所示:
<a runat="server" ID="linkGmail" ....></a>
然后在代码中,您可以更改href属性的值,如下所示:
linkGmail.Attributes["href"] = "http://go.go/default.aspx?url=http://gmail.com";