Разбор HTML - Как получить номер из тега? - PullRequest
0 голосов
/ 07 апреля 2011

Я занимаюсь разработкой приложения для Windows Forms, которое взаимодействует с веб-сайтом.

Используя элемент управления WebBrowser, я контролирую веб-сайт и могу перебирать теги, используя:

HtmlDocument webDoc1 = this.webBrowser1.Document;
HtmlElementCollection aTags = webDoc1.GetElementsByTagName("a");

Теперь я хочу получить определенный текст из тега, которыйниже:

<a href="issue?status=-1,1,2,3,4,5,6,7&amp;@sort=-activity&amp;@search_text=&amp;@dispname=Show Assigned&amp;@filter=status,assignedto&amp;@group=priority&amp;@columns=id,activity,title,creator,status&amp;assignedto=244&amp;@pagesize=50&amp;@startwith=0">Show Assigned</a><br>

Как и здесь, я хочу получить число 244, равное assignedto в указанном выше теге, и сохранить его в переменной для дальнейшего использования.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Вы можете попробовать разбить строку на ';' значения, а затем каждая строка с '=', как это:

string aTag = ...;
foreach(var splitted in aTag.Split(';'))
{
   if(splitted.Contains("="))
   {
      var leftSide = splitted.Split('=')[0];
      var rightSide = splitted.Split('=')[1];
      if(leftSide == "assignedto")
      {
          MessageBox.Show(rightSide); //It should be 244
          //Or...
          int num = int.Parse(rightSide);
      }
   }
}

Другой вариант - использовать регулярные выражения, которые вы можете проверить здесь: www.regextester.com . И еще немного информации о регулярных выражениях: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

Надеюсь, это поможет!

0 голосов
/ 07 апреля 2011

Если все случаи похожи на это, и вы не возражаете против ссылки на System.Web в своем приложении Windows Forms, то можете сделать что-то вроде этого:

using System;

public class Program
{
    static void Main()
    {
        string href = @"issue?status=-1,1,2,3,4,5,6,7&amp;
@sort=-activity&amp;@search_text=&amp;@dispname=Show Assigned&amp;
@filter=status,assignedto&amp;@group=priority&amp;
@columns=id,activity,title,creator,status&amp;assignedto=244&amp;
@pagesize=50&amp;@startwith=0";

        href = System.Web.HttpUtility.HtmlDecode(href);

        var querystring = System.Web.HttpUtility.ParseQueryString(href);

        Console.WriteLine(querystring["assignedto"]);
    }
}

Это упрощенный пример исначала вам нужно извлечь текст атрибута href, но это не должно быть сложным.Имея текст атрибута href, вы можете воспользоваться преимуществами, которые в основном представляют собой строку запроса и повторно использовать код в .NET, который уже анализирует строки запроса.

Чтобы завершить пример, получить текст атрибута href, который вы могли бы сделать:

HtmlElementCollection aTags = webBrowser.Document.GetElementsByTagName("a");

foreach (HtmlElement element in aTags)
{
    string href = element.GetAttribute("href");
}
...