2

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

刷新页面时,数字前缀将始终保持不变。但是,“数字”区域中的最后一个数字会改变,但始终包含“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);
        }

如果有人可以告诉我如何在我的列表框中以(“206”+数字)的形式在浏览器窗口中接收所有内容,我将不胜感激。另外,如果您能详细解释答案并给出很好的评论,我将不胜感激,因为我也想更详细地理解答案。

4

2 回答 2

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()以防有人在那里留下多余的空间。

于 2015-09-08T12:51:42.753 回答
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);
}
于 2015-09-08T12:20:49.727 回答