【问题标题】:Parsing HTML - How to get a number from a tag?解析 HTML - 如何从标签中获取数字?
【发布时间】:2011-07-31 11:59:24
【问题描述】:

我正在开发一个与网站交互的 Windows 窗体应用程序。

使用WebBrowser 控件我正在控制网站,我可以使用以下方法遍历标签:

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

现在,我想从下面的标签中获取特定的文本:

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

像这里一样,我想在上面的标签中获取等于assignedto 的数字 244,并将其保存到变量中以供进一步使用。

我该怎么做?

【问题讨论】:

    标签: c# browser html-parsing


    【解决方案1】:

    你可以尝试用';'分割一个字符串值,然后每个字符串由 '=' 像这样:

    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

    希望对你有帮助!

    【讨论】:

    • 但是如何获取完整的标签作为字符串
    • 尝试 foreach(aTags 中的 HtmlElement htmlElement){ string aTag = htmlElement.OuterHtml;}
    【解决方案2】:

    如果所有情况都与此类似,并且您不介意在 Windows 窗体应用程序中引用 System.Web,您可以执行以下操作:

    using System;
    
    public class Program
    {
        static void Main()
        {
            string href = @"issue?status=-1,1,2,3,4,5,6,7&
    @sort=-activity&@search_text=&@dispname=Show Assigned&
    @filter=status,assignedto&@group=priority&
    @columns=id,activity,title,creator,status&assignedto=244&
    @pagesize=50&@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");
    }
    

    【讨论】:

    • @Joao 很抱歉,但这似乎有点复杂,有没有更简单的方法来做到这一点
    • 除非您添加一堆假设,否则我不会这样做,请问您为什么会觉得这很复杂?
    • 文档中的<a>href 值可能不符合您作为示例提供的格式。
    猜你喜欢
    • 2020-03-27
    • 2015-09-17
    • 2012-05-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多