这是我正在解析的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);
}
}
...但输出为空(未找到内部文本)。
答案 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