Webbrowser表innertext numaric数据如何在文本框中显示?

时间:2015-09-08 12:09:55

标签: regex split innerhtml regex-greedy htmlelements

我在下面发布了我的HTML。我想从我的文本框区域中获取Number值。我已经尝试了几个流程,但我还没有得到任何有效的解决方案。请检查我的HTML和代码段,并向我展示一个可能的解决方案。

刷新页面时,数字前缀始终保持不变。但是," Number"中的最后一个数字;区域将改变,但将始终包含" 206"作为前3位数。以下是我的表格示例。

<table align="center" width="500" border="0">
<tr><td align="center" height="30" style="font-size:medium">See your job Details, adriankdins2f3dd@hotmail.com.</td></tr>
<tr><td align="center" style="color:#CC3300"><b>Your Job Information   is:</b></td></tr>
<tr><td align="center">
<table>
<tr><td><b>Phone Number:</b> 206-600-9159</td></tr>
<tr><td><b>Your AGe:</b> 25</td></tr>
<tr><td><b>Email:</b> adriankdins2f3dd@hotmail.com</td></tr>
<tr><td><b>Job Title</b> cleaner </td></tr>
</table>
</td>
</tr>
<tr><td align="center" valign="middle" height="25">Jobinstruction</td>   
</tr>
<tr><td>
</td></tr>
<tr><td
</td></tr> 
</table>

如下所示,我正在使用列表框尝试此过程,但我没有收到任何内容。

Regex re = new Regex(@"(?<=<tr><td><b>Phone\s Number:\s?</b>\s?)[206]\s.+?(?=</td></tr>)", RegexOptions.Singleline);
        foreach (Match match in re.Matches(webBrowser1.DocumentText))
        {
            listBox1.Items.Add(match.Value);
        }

如果有人能够让我知道我如何能够在浏览器窗口中收到所有内容(&#34; 206&#34; + Number),我会很感激。此外,如果您能够详细解释答案并提出好的评论,我将不胜感激,因为我也想更详细地理解答案。

2 个答案:

答案 0 :(得分:0)

您可以使用HtmlAgilityPack和XPath查询来执行此操作:

using HtmlAgilityPack;
...

HtmlDocument html = new HtmlDocument();
html.LoadHtml(htmlText);
HtmlNode doc = html.DocumentNode;

HtmlNode node = doc.SelectSingleNode("//table/tr/td/b[starts-with(.,'Phone Number:')]/following::text()[1]");

if (node != null)
{
    Console.WriteLine(node.OuterHtml);
}

答案 1 :(得分:0)

由于您使用的是WebBrowser组件,因此无需使用任何外部库。您需要访问正确的表(在大多数情况下,表具有唯一的ID,或者您可以通过使用GetElementsByTagName获得的结果数组中的索引来访问它。)

您可以遍历所有表格,行和单元格,并检查InnerText是否以Phone Number:开头,然后获取您需要的值。

webBrowser1.Navigate(@"C:\tmp2.html");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
    Application.DoEvents();
HtmlElementCollection bColl = webBrowser1.Document.GetElementsByTagName("td");
var TelNum = string.Empty;
var PersonName = string.Empty;
if (bColl != null && bColl.Count > 0)
{
    foreach (HtmlElement td in bColl)
    {
        if (!String.IsNullOrEmpty(td.InnerText) && td.InnerText.StartsWith("Phone Number:"))
            TelNum = td.InnerText.Substring(14).Trim();
        if (!String.IsNullOrEmpty(td.InnerText) && td.InnerText.StartsWith("Your Name is "))
            PersonName = td.InnerText.Substring(13).Trim();
    }
}

我使用Trim()以防有人在那里留下多余空格。