我有这个例子:

<a href="/Forums2008/forumPage.aspx?forumId=393" title="מזג האוויר">מזג האוויר</a>


我要解析的是首先是forumId = 393,然后只有393和链接,最后是这种情况下的名称希伯来语,所以这里的名称应该有点混乱:

מזגהאוויר

我可以使用indexof和substring或htmlagilitypack,我更喜欢htmlagilitypack来获取所有三个值,也许正则表达式也是个好方法。

最后,我应该得到以下四个字符串:


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是列表全局变量。

最佳答案

我会使用HtmlAgilityPackUri.TryCreateParseQueryString

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"];
}

关于c# - 我该如何转义字符串中的引号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32966338/

10-11 22:44