对于Windows Phone 8开发而言,我是一个新手,我正在开发一些东西,作为我正在开发的应用程序的一部分。
现在我正在尝试解析来自RuneScape 07 High Scores等网站的信息 - http://services.runescape.com/m=hiscore_oldschool/hiscorepersonal.ws?user1=zezima
我正在使用HTML Agility Pack并且我能够解析一些数据(直到Woodcutting),但是任何传递的东西都没有出现? (这是我的ListBox的大小吗?)
理想情况下,我希望能够单独解析表信息,而不是像这样解析一个块:
public MainPage()
{
InitializeComponent();
HtmlWeb.LoadAsync("http://services.runescape.com/m=hiscore_oldschool/hiscorepersonal.ws?user1=zezima", DownLoadCompleted);
}
void DownLoadCompleted(object sender, HtmlDocumentLoadCompleted e)
{
if(e.Error == null)
{
HtmlDocument doc = e.Document;
if (doc != null)
{
var result = doc.DocumentNode.SelectNodes("//div[@id='contentHiscores']");
foreach (var htmlNode in result)
{
lBox.Items.Add(htmlNode.InnerText);
}
}
}
但是,如果我尝试使用
访问单个表,例如此表var result = doc.DocumentNode.SelectNodes("//div[@id='contentHiscores']/table/tbody/tr[5]/td[2]");
我收到NullReferenceException。
这是可能的,还是我做错了什么?
答案 0 :(得分:0)
您可能依赖于开发工具(如FireBug或Chrome等)来确定您所关注节点的XPATH。
你可以'真的这样做,因为这些工具给出的XPATH对应于内存中的HTML DOM,而Html Agility Pack只知道服务器发回的原始HTML。
您需要做的是查看发回的内容(或只是查看源代码)。你会看到没有TBODY元素。所以你想找到任何有区别的东西,例如使用XPATH axes。
这是一个似乎有用的代码:
// get all TD nodes with ALIGN attribute set to left
foreach (var node in doc.DocumentNode.SelectNodes("//div[@id='contentHiscores']//td[@align='left']"))
{
var item = lBox.Items.Add(node.InnerText.Trim());
// use an 'XPATH axe': get all sibling TD nodes with ALIGN attribute set to 'right'
foreach (var sibling in node.SelectNodes("following-sibling::td[@align='right']"))
{
item.SubItems.Add(sibling.InnerText.Trim());
}
}