2011-04-07 68 views
0

我正在开发与Web站点交互的Windows窗体应用程序。解析HTML - 如何从标记中获取数字?

使用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>

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

我该怎么做?

回答

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

希望它有帮助!

+0

但如何让coumplete标签作为字符串 – Prachur 2011-04-07 08:56:07

+0

尝试的foreach(HTML元素的HtmlElement在aTags){字符串ATAG = htmlElement.OuterHtml ;} – icesar 2011-04-07 09:45:54

+0

@得到我需要从你的回答谢谢 – Prachur 2011-04-07 09:55:32

0

如果所有情况与此类似,你不介意在你的Windows窗体应用程序System.Web参考,土特产品可以做这样的事情:

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"); 
} 
+0

@ Joao抱歉说,但这似乎有点复杂,有没有更简单的方法来做到这一点 – Prachur 2011-04-07 09:05:04

+0

除非你添加一堆假设,我不会做任何其他方式,我可以问为什么你找到这个复杂? – 2011-04-07 09:18:43

+0

actualy HttpUtility给出错误,而不是上下文 – Prachur 2011-04-07 09:33:29