Я хочу использовать HtmlAgilityPack для очистки содержимого от https://steamid.io/, в частности, я хочу очистить статус пользователя «Онлайн-статус».
Я могу правильно собрать нужную мне информацию с помощью XPath, но .. Профиль каждого пользователя отличается там для изменений XPath, только немного.
Если профиль пользователя «частный», XPath
/html/body/div/div[2]/div[2]/section/dl/dd[9]
Если профиль пользователя не является «частным», XPath
/html/body/div/div[2]/div[2]/section/dl/dd[9]/span
Как я могу заставить HtmlAgilityPack проверить, какой div я хочу отобразить, поскольку я могу установить свой собственный профиль как закрытый и закрытый, но, очевидно, мне нужно соответствующим образом изменить XPath, чтобы иметь возможность отображать статус.
Если я использую XPath, содержащий /span, а профиль пользователя является закрытым, я получаю
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Если я открою профиль и использую /span XPath, он отлично работает и показывает мне, что я хочу.
Вот весь мой код
'Online Status - from steamid.io
Dim curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]/span")
'Dim curOnline2 = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]")
For Each node In curOnline
onlinelbl.Text = node.InnerText
If node.InnerText.ToString().Contains("private") Then
onlinelbl.ForeColor = Color.Red
onlinelbl.Text = "Private"
ElseIf onlinelbl.Text.Contains("away") Then
onlinelbl.Text = onlinelbl.Text.Replace("away", "Away")
onlinelbl.ForeColor = Color.Orange
ElseIf onlinelbl.Text.Contains("online") Then
onlinelbl.Text = onlinelbl.Text.Replace("online", "Online")
onlinelbl.ForeColor = Color.Green
ElseIf onlinelbl.Text.Contains("offline") Then
onlinelbl.Text = onlinelbl.Text.Replace("offline", "Offline")
onlinelbl.ForeColor = Color.Red
End If
Next
```





Вы можете просто найти наличие XPath с помощью /span:
Dim curOnline As HtmlNodeCollection
curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]/span")
If curOnline Is Nothing Then
curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]")
End If
Просто измените тип curOnline на HtmlNodeCollection, затем
Кажется, это сработало. Спасибо за помощь.
Спасибо за ваш ответ. Однако при использовании приведенного выше кода у меня возникает ошибка
Error BC30311 Value of type 'HtmlNodeCollection' cannot be converted to 'XmlNodeList'.