正在解析 html 的内文

Parsing innertext of html

这是我正在解析的 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);
            }
        }

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

您可以使用 HTML Agility Pack 而不是 HTML 文档,然后您可以在 HTML 中进行深度解析。欲了解更多信息,请参阅以下信息。 见下文link。 How to use HTML Agility pack

这可能是因为 SelectSingleNode() 返回的 HTML 文档中的第一个 link 不包含文本 "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);
}

您提供的一段代码无法编译,因为 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);
    }
}