Текст очистки VB.NET HtmlAgilityPack

Я хочу использовать 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
    ```

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто найти наличие 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

Спасибо за ваш ответ. Однако при использовании приведенного выше кода у меня возникает ошибка Error BC30311 Value of type 'HtmlNodeCollection' cannot be converted to 'XmlNodeList'.

Dan Andrews 11.05.2022 04:56

Просто измените тип curOnline на HtmlNodeCollection, затем

Étienne Laneville 11.05.2022 06:18

Кажется, это сработало. Спасибо за помощь.

Dan Andrews 11.05.2022 14:54

Другие вопросы по теме