Получение значения из HTML с помощью C#

#c#

#c#

Вопрос:

В настоящее время я работаю над системой управления запасами со штрих-кодами. Я нашел веб-сайт, с которого я могу получить информацию о штрих-коде, она хранится в href. Вот пример того, как это выглядит:

 <a href="/ean/BarcodeNumber" target="_blank">ItemName</a>
  

Что мне нужно сделать, это получить имя элемента, сохранить его в строку, чтобы затем я мог обновить метку. Основная проблема, с которой у меня возникают проблемы, — это доступ к определенным HTML-тегам в моем коде.

Есть ли простой способ получить «ItemName» из тега?

Спасибо

Комментарии:

1. Пожалуйста, опубликуйте свой текущий код и определите, что означает «наличие проблем».

2. Вам нужен анализатор DOM.

3. вы знакомы с xpath? вы можете прочитать HTML с помощью чего-то вроде html-agility-pack, а затем повторно получить элемент, используя xpath, который указывает на этот a-тег

4. Во-вторых, используя пакет HTML Agility pack, похоже, что вы удаляете веб-сайт для получения информации, HTMLAP позволит вам сканировать весь веб-сайт и выбирать определенные HTML-теги на основе простых фильтров.

5. Если ваши запросы просты (или средне-простые :), вы также можете просто использовать класс WebBrowser, который вернет вам HtmlDocument объект. Затем вы можете использовать стандартные инструменты для извлечения необходимых вам значений. Например., [HtmlDocument].GetElementsByTagName("A").OfType<HtmlElement>().Where(elm => elm.GetAttribute("href").Contains("BarcodeNumber"));

Ответ №1:

Я могу порекомендовать пакет гибкого управления Html через NuGet:
простой пример с XPath:

 var html = 
@"<html>
  <head>
  <title></title>
  </head>
  <body>
  <a href=""/ean/BarcodeNumber"">My Link Text</a>
  </body>
  </html>";

    var htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(html);

    string name = htmlDoc.DocumentNode
                    .SelectSingleNode("//html/body/a[@href='/ean/BarcodeNumber']")
                    .InnerText;
  

Комментарии:

1. Спасибо вам за это! Есть ли в любом случае, что я могу заставить его также отображать имя элемента? Поскольку в настоящее время выше отображается только «Мой текст ссылки» и никогда не используется Html Agility Pack, я понятия не имею, как я буду получать фактическое название элемента. Я не сказал, но это для веб-сайта, поэтому, полагаю, я бы тоже изменил html-URL веб-сайта, поскольку я только что понял, что в настоящее время он сохраняет html в переменной, не получая веб-сайт! Дух!

2. @KevinGorman Я думаю, что я не понимаю, что вы на самом деле имеете в виду. У вас нет HTML, доступного в вашем коде, или вам нужна помощь для получения html какого-либо веб-сайта? Если да, пожалуйста, задайте другой вопрос по этой конкретной проблеме. В любом случае было бы очень полезно, если бы вы предоставили больше контекста и информации в своем вопросе.

3. Извините, я начну снова. Я нашел веб-сайт, который предлагает информацию о штрих-коде, мне тоже нужны URL-адреса доступа (/?q = Barcode), на этой странице есть тег hred, из которого мне нужно получить внутренний HTML-код, <a href=»/ean /Barcode» target=»_blank»>ItemName</a> (Xpath: /html/body/div[2]/p[3]/b / a). Что мне нужно, так это способ для c # получить itemname из любого URL, который я ему даю. Все URL-адреса одинаковы, просто разные номера штрих-кодов и названия элементов. Создать URL-адрес не составит труда, просто я не знаю, как получить доступ к внутреннему тексту html a href. Итак, все, что я хочу, это MessageBox. Показать(имя_элемента);

4. Это именно то, что показано в примере. Вы можете использовать HtmlAgiltyPack с приведенным выше кодом, чтобы получить внутренний текст ссылки. Посмотрите на этот пример на .NET Fiddle, чтобы увидеть HtmlAgilityPack в действии