加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

c# – 从Web响应中获取HTML值

发布时间:2020-12-14 22:37:56 所属栏目:资源 来源:网络整理
导读:我试图解析几个值的HTML响应,然后将它们插入SQL.我能够获得两个值但是,因为代码包含在foreach语句中,所以我得到它们两次. 这是我的HTML回复 这是我的代码: var response = (HttpWebResponse)request.GetResponse();var stream = response.GetResponseStream

我试图解析几个值的HTML响应,然后将它们插入SQL.我能够获得两个值但是,因为代码包含在foreach语句中,所以我得到它们两次.

这是我的HTML回复

这是我的代码:

var response = (HttpWebResponse)request.GetResponse();
var stream = response.GetResponseStream();
HtmlDocument doc = new HtmlDocument();
doc.Load(stream);

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//table[@class]"))
{

    foreach (HtmlNode node2 in node.SelectNodes("//td[@class = 'serviceOK']"))
    {
        var value = node2.InnerText;
    }

    foreach (HtmlNode node3 in node.SelectNodes("//a[contains(@href,'avail.cgi')]"))
    {
        var name = node3.InnerText;
    }

}

name显示了servicename,value显示了类serviceOK,但由于第一个foreach,它再次重复.

我的结果如下:

100.000% (100.000%)
100.000% (100.000%)
servicename
servicename2
100.000% (100.000%)
100.000% (100.000%)
servicename
servicename2

有没有办法,首先,匹配值,两个,只有他们显示一次?

最佳答案
您的第一个foreach遍历整个文档,就像第一个foreach语句中的其他foreach语句一样.
因为有两个表元素与您的XPath表达式匹配

"//table[@class]"

你得到了两次答案.如果你有更多的表元素匹配你的XPath表达式,例如7,那么你会得到7次结果.
你想要的是找到表中的表行(tr)内的类“serviceOK”的所有表格分区(td).
一旦你有了这个HtmlNode,你就可以转到上一个包含服务名称的兄弟节点.

var response = (HttpWebResponse)request.GetResponse();
var stream = response.GetResponseStream();
HtmlDocument doc = new HtmlDocument();
doc.Load(stream);

foreach (HtmlNode serviceOkNode in doc.DocumentNode.SelectNodes("//table[@class]/tr/td[@class = 'serviceOK']"))
{
    HtmlNode serviceNameNode = serviceOkNode.PreviousSibling;
    var value = serviceOkNode.InnerText;
    var name = serviceNameNode.InnerText;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读