HtmlAgilityPack将XPath查询转换为LINQ

时间:2014-12-12 21:48:16

标签: c# linq xpath xamarin

我正在将XPath查询转换为LINQ ... 使用NuGet的HtmlAgilityPack和Xamarin来解析网页。 问题是我不能在Xamarin中使用XPath,因为它不受NuGet包的支持,因为我没有编译我自己的HtmlAgilityPack.dll的许可,所以我必须使用LINQ。

以下XPath查询是我尝试转换为LINQ的内容:

doc.DocumentNode.SelectNodes("//table[@id='bodyContent_gridHundar']//tr[descendant::td and not(@class='pagestyle')]")

提前致谢!

更新了正确答案!

doc.DocumentNode.Descendants ("table")
.Where (o => o.GetAttributeValue ("id", "") == "bodyContent_gridHundar")
.First ()
.Descendants ("tr")
.Where (o => o.Descendants ("td").Any () && o.GetAttributeValue ("class", "") != "pagestyle");

1 个答案:

答案 0 :(得分:1)

您可以尝试这种方式:

doc.DocumentNode
   // '//table' :
   .Descendants("table")
   // '[@id='bodyContent_gridHundar']' :
   .Where(o => o.GetAttributeValue("id", "") == "bodyContent_gridHundar")
   // '//tr' :
   .Descendants("tr")
   // '[descendant::td and not(@class='pagestyle')]' :
   .Where(o => o.Descendants("td").Any() && o.GetAttributeValue("class", "") != "pagestyle")