我试图解析几个值的HTML响应,然后将它们插入sql.我能够获得两个值但是,因为代码包含在foreach语句中,所以我得到它们两次.
这是我的HTML回复
Nown TimeminedNownminedNowN'>0.000% (0.000%)NowN'>0.000% (0.000%)
这是我的代码:
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;
}
原文地址:https://www.jb51.cc/html/425549.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。