2014-12-12 3 views
0

Я борюсь с преобразованием запроса XPath в LINQ ... Использование HtmlAgilityPack от NuGet с помощью Xamarin для анализа веб-страницы. Проблема заключается в том, что я не могу использовать XPath в Xamarin, поскольку он не поддерживается пакетом NuGet, и поскольку у меня нет лицензии на компиляцию моего собственного файла HtmlAgilityPack.dll, я должен использовать LINQ.HtmlAgilityPack конвертировать запрос XPath в 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

Вы можете попробовать этот способ:

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") 
+1

Спасибо! Пришлось добавить .First() после первой функции .Where(). Обновлен мой вопрос с помощью этого решения! – jymdman