【发布时间】:2017-08-22 04:34:11
【问题描述】:
通过这段代码,我得到了 HTLM 文档:
private static async Task<HtmlDocument> GetHtmlOfPage(string website)
{
return await new HtmlWeb().LoadFromWebAsync(website);
}
元素的Xpath是:
id('ContentHolderMain_ContentHolderMainContent_ContentHolderMainContent_pnlDaily')/x:div/x:ol/x:li[3]/x:ul
(使用 Xpath Checker for firefox)。
检索值的代码:
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;
}
我期望像“Meat”、“Vegatarian”、....这样的值,但我没有得到任何结果。我做错了什么以及如何将 Xpath 与 UWP 一起使用?
更新(21.6.2017):
我终于设法获得了我正在寻找的值:
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;
}
编辑:由于“x:”符号,我的 Firefox Xpath 插件似乎也已过时。没有代码使用它们。
【问题讨论】:
标签: c# html xpath uwp html-agility-pack