HtmlAgilityPack с использованием Linq для платформы windows phone 8.1
Поскольку HtmlAgilityPack еще не поддерживается в windows phone 8.1, ссылка вручную в проекте была хитрым решением. Но это не единственная проблема. Я мог бы использовать XPath
для моего прошлого проекта, чтобы выбрать узлы. Теперь я вижу, что функции HtmlDocumentNode.SelectNode()
больше нет(из-за совместимости версий может быть).
То, что я использовал в своем прошлом проекте, было похоже на это
HtmlNode parent = document.DocumentNode.SelectSingleNode("//ul[@class='songs-list1']");
HtmlNodeCollection x = parent.ChildNodes;
Я поискал по stackoverflow и google и получил идею, что все еще можно выбрать узлы с помощью Linq.
Я ищу блок кода, который будет работать как SelectNodes
, SelectNode
.
Загрузка HtmlDocument
асинхронно была бы оценена.
2 ответа:
Если вы хотели перевести ваш текущий код, который использует XPath, чтобы использовать LINQ, то это будет сделано:
Но если вы ожидаете найти методы, которые принимают XPath в HtmlAgilityPack версии для Windows Phone 8.1 universal apps или Windows RT ("я ищу блок кода, который будет работать какHtmlNode parent = document.DocumentNode .Descendants("ul") .FirstOrDefault(o => o.GetAttributeValue("class", "") == "songs-list1") HtmlNodeCollection x = parent.ChildNodes;
SelectNodes
,SelectNode
"), вам лучше этого не делать : HtmlAgilityPack & Windows 8 Metro Apps (ответ автора HAP).
Это можно сделать с помощью метода Element/s:
HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlString); var h6Nodes = from h6element in doc.DocumentNode.Element("body").Element("center").Elements("h6") where h6element.Attributes["class"].Value.Equals("songs-list") select h6element;
Это при условии, что у вас есть что-то вроде
string htmlString = @"<html> <body> <center> <h6>Hello </h6> <h6>World! </h6> <h6 class=""songs-list""> Insert that one song here </h6> </center> </body> </html>"
И это приведет к узлу
<h6>
с классом songs-list.