我有这个例子:
<a href="/Forums2008/forumPage.aspx?forumId=393" title="מזג האוויר">מזג האוויר</a>
我要解析的是第一个是forumId = 393然后只有393和链接以及最后一个名字在这种情况下是希伯来语,所以这里的名字应该是有点乱:
מזגהאוויר
我可以使用indexof和substring或htmlagilitypack我更喜欢htmlagilitypack来获取所有三个值,也许regex也是好方法。
最后我应该得到这四个字符串:
forumId = 393
393
מזגהאוויר
/Forums2008/forumPage.aspx?forumId=393
我到目前为止所尝试的并且它甚至没有接近我的目标是一次使用htmlagilitypack而另一次使用下载html将其保存为文件然后解析它我认为使用indexof和substring但不确定如何:
HtmlAgilityPack.HtmlDocument doc =
Qhw.Load("http://www.tapuz.co.il/forums/forumslistnew.asp");
parseIds(doc);
WebClient webclient = new WebClient();
webclient.DownloadFile("http://www.tapuz.co.il/forums/forumslistnew.asp",
@"c:\testhtml\mainforums.html");
webclient.Dispose();
string[] lines = File.ReadAllLines(@"c:\testhtml\mainforums.html");
foreach(string line in lines)
{
if (line.Contains("href") && line.Contains("forumId=") && !wholeids.Contains(line))
{
string tg1 = "href="";
wholeids.Add(line);
}
}
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
idsnumbers.Add(link.InnerText);
}
idsnumbers是List global var。
答案 0 :(得分:2)
我会使用HtmlAgilityPack
,Uri.TryCreate
和ParseQueryString
:
string html = @"<a href=""/Forums2008/forumPage.aspx?forumId=393"" title=""מזג האוויר"">מזג האוויר</a>";
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(html);
var anchor = htmlDoc.DocumentNode.Descendants("a").FirstOrDefault();
if(anchor != null)
{
string name = anchor.InnerText;
string href = anchor.Attributes["href"].Value;
Uri uri;
if(Uri.TryCreate(href, UriKind.RelativeOrAbsolute, out uri))
{
var queryString = href.Substring(href.IndexOf('?')).Split('#')[0]; // because of relative uri
var queryKeyValues = System.Web.HttpUtility.ParseQueryString(queryString);
string forumId = queryKeyValues["forumId"];
}
}
你也可以创建一个假的绝对uri来避免字符串方法:
if(Uri.TryCreate(href, UriKind.RelativeOrAbsolute, out uri))
{
if(!uri.IsAbsoluteUri)
uri = new Uri(new Uri("http://www.google.com/"), uri);
var queryKeyValues = System.Web.HttpUtility.ParseQueryString(uri.Query);
string forumId = queryKeyValues["forumId"];
}