Как извлечь следующую строку с помощью HTMLAgilityPack?

Я хотел бы извлечь цену из следующей строки HTML:

<span class="bold colorwhite size11 floatLeft textCenter cartbox_right">&euro; 150,42</span>

Веб-сайт делает это немного проще, поскольку этот класс span существует только один раз, но программа не работает должным образом. Он выводит:

euro; 0,00

Вот как выглядит мой код:

private string getTextfrom()
{

    var webGet = new HtmlWeb();
    var doc = webGet.Load(txtURL.Text);

    HtmlNode price = doc.DocumentNode.SelectSingleNode("//span[@class='bold colorwhite size11 floatLeft textCenter cartbox_right']");

    if (price != null) {
        return price.InnerHtml;
    }

    else
        return "nothing found";

}

person Metro1337    schedule 13.01.2014    source источник


Ответы (1)


Вам просто нужны InnerText и Split, чтобы получить 150,42 (если это то, что вы хотите):

HtmlNode priceNode = doc.DocumentNode.SelectSingleNode("//span[@class='bold colorwhite size11 floatLeft textCenter cartbox_right']");
string price = priceNode.InnerText.Split(';').Last().Trim();
person Tim Schmelter    schedule 13.01.2014
comment
Ах я вижу. Давненько не работал на C#... Спасибо! Просто интересно - он говорит, что System.Array не содержит определения для «последнего». Есть идеи, почему? - person Metro1337; 13.01.2014
comment
@ Metro1337: это часть пространства имен System.Linq. Вы используете ‹= .NET 2? Если вы не можете использовать LINQ, вы должны использовать Dim split = priceNode.InnerText.Split(';') Dim price = split(split.Length-1).trim - person Tim Schmelter; 13.01.2014
comment
Ах понятно. Благодарю вас! Он работает почти идеально, просто показывает 0,00. Трудно понять, почему. Может есть идеи и на этот счет? - person Metro1337; 13.01.2014
comment
@ Metro1337: где и как вы это выводите? Вы использовали отладчик, чтобы увидеть, что происходит? - person Tim Schmelter; 13.01.2014
comment
О, черт, я забыл все об этом действительно много PHP. Я использую кнопку для вывода lbl_price.Text = getTextfrom(); Как именно вы можете использовать отладчик? - person Metro1337; 13.01.2014
comment
@Metro1337: вам просто нужно установить точку останова, например, на строке string price = .... Поэтому вам нужно нажать на левую сторону рядом с номером строки. Например, вы можете использовать окно быстрого просмотра для проверки всех значений. Однако вы уверены, что span-InnerText равен &euro; 150,42? - person Tim Schmelter; 13.01.2014
comment
Ах понятно! Ну, как вы можете прочитать в моем вопросе, вывод с самого начала был евро; 0,00, но я не уверен, почему. - person Metro1337; 13.01.2014
comment
@Metro1337: я знаю, но если я использую вашу строку и вывожу цену, я получаю 150,42. Таким образом, должна быть проблема либо с вашим вводом, либо с выводом. Но я понятия не имею, что происходит не так. - person Tim Schmelter; 13.01.2014
comment
Я хотел бы сначала проверить свой ввод. Не подскажете, как преобразовать это в строку? var doc = webGet.Load(txtURL.Text); - person Metro1337; 13.01.2014
comment
HtmlDocument.Load(string path) загружает документ из пути к файлу, так что вы хотите преобразовать в строку и почему? Вы должны проверить priceNode.InnerText в отладчике. Вы также можете прочитать файл с помощью File.ReadAlltext и передать эту строку в LoadHtml: webGet.LoadHtml(File.ReadAllText(path));. - person Tim Schmelter; 13.01.2014
comment
Поскольку комментарии здесь слишком расширили бы вопрос, я собираюсь задать еще один вопрос, но оставлю его здесь, потому что он может помочь другим пользователям. Спасибо за вашу помощь в любом случае - person Metro1337; 14.01.2014