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 4

2 ответа:

Если вы хотели перевести ваш текущий код, который использует XPath, чтобы использовать LINQ, то это будет сделано:

HtmlNode parent = document.DocumentNode
                          .Descendants("ul")
                          .FirstOrDefault(o => o.GetAttributeValue("class", "") 
                                                   == "songs-list1")
HtmlNodeCollection x = parent.ChildNodes;
Но если вы ожидаете найти методы, которые принимают XPath в HtmlAgilityPack версии для Windows Phone 8.1 universal apps или Windows RT ("я ищу блок кода, который будет работать как 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.