解析html的innertext

时间:2016-02-17 06:01:28

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

这是我正在解析的HTML的一部分

<li><a href="http://some.link.com/4DFR6DJ43Y/sessionid?ticket=ASDSIDFK32423421" target="_blank">http://some.link.com/4DFR6DJ43Y/sessionid?ticket=ASDSIDFK32423421</a></li>

我想将http://some.link.com/4DFR6DJ43Y/sessionid?ticket=ASDSIDFK32423421作为输出。

到目前为止,我已经尝试了

        HtmlDocument document = new HtmlDocument();
        document.LoadHtml(responseFromServer);


        var link = document.DocumentNode.SelectSingleNode("//a");

        if (link != null)
        {  
            if(link.innerText.Contains("ticket"))
            {
                Console.WriteLine(link.InnerText);
            }
        }

...但输出为空(未找到内部文本)。

3 个答案:

答案 0 :(得分:1)

这可能是因为SelectSingleNode()返回的HTML文档中的第一个链接,不包含文本"ticket"。您可以直接在XPath中检查目标文本,如下所示:

var link = document.DocumentNode.SelectSingleNode("//a[contains(.,'ticket')]");

if (link != null)
{
    Console.WriteLine(link.InnerText);
}

或者如果您愿意,可以使用LINQ样式:

var link = document.DocumentNode
                   .SelectNodes("//a")
                   .OfType<HtmlNode>()
                   .FirstOrDefault(o => o.InnerText.Contains("ticket"));

if (link != null)
{
    Console.WriteLine(link.InnerText);
}

答案 1 :(得分:1)

您提供了一段无法编译的代码,因为未定义innerText。如果您尝试使用此代码,您可能会得到您要求的内容:

HtmlDocument document = new HtmlDocument();
document.LoadHtml(html);

var link = document.DocumentNode.SelectSingleNode("//a");

if (link != null)
{
    if(link.InnerText.Contains("ticket"))
    {
        Console.WriteLine(link.InnerText);
    }
}

答案 2 :(得分:0)

您可以使用HTML Agility Pack而不是HTML Document,然后您可以在HTML中进行深度解析。有关更多信息,请参阅以下信息。 请参阅以下链接。 How to use HTML Agility pack