我正在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 的讨论