如何从字符串中转义引号?

时间:2015-10-06 09:26:19

标签: c# .net winforms

我有这个例子:

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

我要解析的是第一个是forumId = 393然后只有393和链接以及最后一个名字在这种情况下是希伯来语,所以这里的名字应该是有点乱:

מזגהאוויר

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

最后我应该得到这四个字符串:

  1. forumId = 393

  2. 393

  3. מזגהאוויר

  4. /Forums2008/forumPage.aspx?forumId=393

  5. 我到目前为止所尝试的并且它甚至没有接近我的目标是一次使用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。

1 个答案:

答案 0 :(得分:2)

我会使用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"];
}