使用HTML Agility Pack C解析HTML标记时出现问题#

时间:2011-03-23 14:21:04

标签: c# xpath html-parsing html-agility-pack

这似乎应该是一件容易的事,但我遇到了一些重大问题。我正在尝试使用HAP解析特定标记。我使用Firebug找到我想要的XPath并提出// * [@ id =“atfResults”]。我相信我的问题是“因为信号是一个新字符串的开始和结束。我已经尝试将它作为文字字符串,但我有错误。我附加了函数

        public List<string> GetHtmlPage(string strURL)
    {
        // the html retrieved from the page

        WebResponse objResponse;
        WebRequest objRequest = System.Net.HttpWebRequest.Create(strURL);
        objResponse = objRequest.GetResponse();
        // the using keyword will automatically dispose the object 
        // once complete
        using (StreamReader sr =
        new StreamReader(objResponse.GetResponseStream()))
        {//*[@id="atfResults"]
            string strContent = sr.ReadToEnd();
            // Close and clean up the StreamReader
            sr.Close();
            /*Regex regex = new Regex("<body>((.|\n)*?)</body>", RegexOptions.IgnoreCase);

            //Here we apply our regular expression to our string using the 
            //Match object. 
            Match oM = regex.Match(strContent);
            Result = oM.Value;*/

            HtmlDocument doc = new HtmlDocument();
            doc.Load(new StringReader(strContent));
            HtmlNode root = doc.DocumentNode;
            List<string> itemTags = new List<string>();



            string listingtag = "//*[@id="atfResults"]";

            foreach (HtmlNode link in root.SelectNodes(listingtag))
            {
                string att = link.OuterHtml;

                itemTags.Add(att);
            }

            return itemTags;
        }

    }

2 个答案:

答案 0 :(得分:1)

你可以逃脱它:

string listingtag = "//*[@id=\"atfResults\"]";

如果你想使用原始字符串,那就是:

string listingtag = @"//*[@id=""atfResults""]";

正如您所看到的,原始字符串在这里并没有真正带来好处。

但是,您可以使用:

HtmlNode link = doc.GetElementById("atfResults");

这也会稍快一点。

答案 1 :(得分:0)

你试过这个:

  string listingtag = "//*[@id='atfResults']";