我正在尝试使用div列表中的HtmlAgilityPack子元素。最父的Div是 // div [@class ='cell in-area-cell-cell mid-cell'] ,如果我只是遍历列表,我可以显示来自每个父级的所有子内容
但我不想显示所有内容,我想从每个孩子中选择某些div,p和a,但下面的代码只给出了第一个 // a的列表[@类= '列出名'] 即可。它给了我正确数量的lstRecords但它们都具有相同的值。
这是我的代码:
型号:
public class TempSearch
{
public string listing_name { get; set; }
}
查看:
@model List<tempsearch.Models.TempSearch>
@foreach (var ps in Model)
{
<h4>@Html.Raw(ps.listing_name)</h4>
}
控制:
public ActionResult TempSearch()
{
string html = Server.MapPath("~/Content/tempsearch.html");
HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load(html);
List<TempSearch> lstRecords = new List<TempSearch>();
foreach (HtmlNode node in document.DocumentNode.SelectNodes("//div[@class='cell in-area-cell middle-cell']"))
{
TempSearch tempSearch = new TempSearch();
HtmlNode node2 = document.DocumentNode.SelectSingleNode("//a[@class='listing-name']");
tempSearch.listing_name += node2.InnerHtml.Trim();
lstRecords.Add(tempSearch);
}
return View(lstRecords);
}
我想这与我填充列表的方式有关?
答案 0 :(得分:1)
您希望相对于node
变量当前引用的元素使用XPath,如下所示:
HtmlNode node2 = node.SelectSingleNode(".//a[@class='listing-name']");
注意XPath开头的.
表示XPath是相对于当前上下文元素,SelectSingleNode()
方法调用node
变量将node
作为当前上下文元素。否则,您将始终在每次迭代中反复获得相同的元素。