With this code I get the HTLM document:
private static async Task<HtmlDocument> GetHtmlOfPage(string website)
{
return await new HtmlWeb().LoadFromWebAsync(website);
}
The Xpath of the element is:
id('ContentHolderMain_ContentHolderMainContent_ContentHolderMainContent_pnlDaily')/x:div/x:ol/x:li[3]/x:ul
(using Xpath Checker for firefox).
The code for retrieving the values:
public List<string> GetTypesOfFood(string website)
{
List<string> TypesOfFood = new List<string>();
HtmlDocument document = GetHtmlOfPage(website).Result;
/* HtmlNode docNodes = document.DocumentNode;
HtmlNode ul = docNodes.Element("id('ContentHolderMain_ContentHolderMainContent_ContentHolderMainContent_pnlDaily')/x:div/x:ol/x:li[1]/x:ul[@title]");*/
HtmlNode div = document.GetElementbyId("ContentHolderMain_ContentHolderMainContent_ContentHolderMainContent_pnlDaily");
if(div != null)
{
var ul = div.Element("//div[@class='holderRestaurantInfo']/ol/li[1]/ul/@title").GetAttributeValue("title", "title");
string a = ul;
TypesOfFood.Add(a);
}
return TypesOfFood;
}
I expect values like "Meat", "Vegatarian",.... but I get no results. What I am doing wrong and how to use Xpath with UWP?
Update (21.6.2017):
I finally managed to get the values I was looking for:
public List<string> GetTypesOfFood()
{
if(!InternetConnection)
{
flag = -3;
return null;
}
List<string> TypesOfFood = new List<string>();
WebResponse response = GetResponse().Result;
Stream stream = response.GetResponseStream();
string result = "";
using (StreamReader sr = new StreamReader(stream))
{
result = sr.ReadToEnd();
}
HtmlDocument MobileDocument = new HtmlDocument();
MobileDocument.LoadHtml(result);
var images = MobileDocument.DocumentNode.SelectNodes("//img[@class='pull-right']");
foreach(var image in images)
{
HtmlAttribute title = image.Attributes[@"title"];
TypesOfFood.Add(title.Value);
}
return TypesOfFood;
}
private async Task<WebResponse> GetResponse()
{
WebRequest req = WebRequest.Create("https://www.studentska-prehrana.si/sl/restaurant/Details/2521");
WebResponse r = await req.GetResponseAsync();
return r;
}
Edit: It also seems my Firefox Xpath plugin is outdated due to the "x:" signs. No code uses them.