HtmlAgilityPack 解析 Web 数据以在 Android C# 中选择第二个属性



我正在Xamarin中使用HtmlAgilityPack for android解析一个网站。我知道有 first(( 关键字,但有谁知道我将如何访问 html 文本的第二个实例?例如,我只想看到"到达预测目前不可用",如应用示例图片所示。

应用示例图片

void Btn_Click(object sender, System.EventArgs e)
{
HtmlWeb hw = new HtmlWeb();
//stores site in a document object of HTMLDocument class
HtmlDocument document = hw.Load("https://broncoshuttle.com/simple/routes/3164/stops/36359");
HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//ul//li[contains(.,'')] ");
string result = "";
foreach( var item in nodes)
{
result += item.InnerText;
}
MyTextView.Text = result;
}

如果我能控制 HTML,我可能会使用 HTML 类,比如error-massage来使 HTML 标记更具语义和更精确地搜索。目前可以使用简单的HtmlNodeCollection索引器或Enumerable.Skip()Enumerable.Take()Linq 扩展方法:

// errpr-message HTML class and SelectSingleNode().
HtmlNode error = document.DocumentNode.SelectSingleNode(@"//*[contains(concat("" "", normalize-space(@class), "" ""), "" error-message "")]");
// HtmlNodeCollection indexer.
HtmlNode error = nodes[1];
// Linq.
HtmlNode error = nodes.Skip(1).Take(1).SingleOrDefault();

有关更多信息,请查看:

  • 维基百科上的语义HTML页面
  • MDN 上的语义页面
  • 如何使用 XPath 通过 CSS 类查找元素?关于 StackOverflow 的讨论

最新更新