我目前正在尝试根据上面的标题解析HTML文档中的链接,但无论我尝试什么,程序都无法找到它。 以下是我所使用的方法:
public string findMajorURL(string collegeURL, string major)
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(collegeURL);
var root = doc.DocumentNode;
var htmlNodes = root.Descendants();
//Find html node containing the major heading
foreach(HtmlNode node in htmlNodes)
{
if (node.InnerText == major)
{
HtmlNode target = node.NextSibling;
List<string> links = target.Descendants("a").Select(a => a.Attributes["href"].Value).ToList();
return links.First()+ "__IT WORKED__";
}
}
return "Major not found";
}
这就是我试图解析的HTML:
<div style="padding-left: 20px">
<h3 id="ent1629">Biological Sciences </h3>
<a href="preview_entity.php?catoid=5&ent_oid=1629&returnto=818">Go to information for this department.</a>
<br>
<p>...</p>
<div id="data_c_1629" style="display: none">...</div>
<!--script language="javascript">hideshow(data_c_1630)</script-->
用户输入的主要内容应与生物科学标题相匹配。基于标题,我想在>>下获得链接,在这种情况下是 preview_entity.php?catoid = 5&amp; ent_oid = 1629&amp; returnto = 818 < / p>
警告:我不能将XPath与我拥有的Visual Studio版本一起使用,因此我假设使用LINQ以某种方式将是最佳方式,但我再次不确定。 编辑事实证明,内部文字与专业不匹配,但是,我不知道这是怎么回事,因为我直接从html代码中取出。关于什么是错的任何想法?
答案 0 :(得分:0)
根据发布的HTML代码段,node
块内的if
引用了<h3>
元素,target
引用了<h3>
的下一个兄弟<a>
}}。也就是说,您不需要target.Descendants("a")
。只需直接从href
获取target
属性:
if (node.InnerText == major)
{
HtmlNode target = node.NextSibling;
return target.GetAttributeValue("href", "")+ "__IT WORKED__";
}