发布于2023-01-11 03:02 阅读(1201) 评论(0) 点赞(19) 收藏(1)
我正在尝试构建一个类,该类将基于另一个网站读取、分组和排序 html 文档。
我将展示我目前拥有的东西。这是网页构建方式的示例(请记住,这只是“构建方式”,我已经重写了整个内容):
<tr>
<td id="ab100_ab100_ab100_Main_Sub_Sub_objComponent" class="compContainer">
<table class="objDetails" style="position: relative; margin: auto;">
<tr>
<div class="smallSetup" style="margin-top: 10px;">
<b class="ft"><b></b></b>
<div id="ab100_ab100_ab100_Main_Sub_Sub_firstProp" class="row">
<div class="label">
First Name:</div>
<div class="value">
Albert Trebla</div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_secondProp" class="row">
<div class="label" style="line-height:25px;">
Second Year:</div>
<div class="value">
<img src="/Setup/Images.ashx?size=medium&name=5&type=symbol" alt="5" align="absbottom" /><img src="/Setup/Images.ashx?size=medium&name=W&type=symbol" alt="Second" align="absbottom" />
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_thirdProp" class="row" style="height:15px; position:relative;">
<div class="label" style="font-size:.7em;">
Classy Stuff:</div>
<div class="value">
7<br /><br /></div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_fourthProp" class="row">
<div class="label">
Weather:</div>
<div class="value">
Cloudy — Might Rain</div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_fifthProp" class="row">
<div class="label">
Front Text:</div>
<div class="value">
<div class="frontTextBox">Opened</div><div class="frontTextBox">The shop is opened when the bridges are lowered.</div></div>
</div>
<div id="ab100_ab100_ab100_Main_Sub_Sub_sixthProp" class="row">
<div class="label">
Flavor:</div>
<div id="ctl00_ctl00_ctl00_MainContent_SubContent_SubContent_FlavorText" class="value">
<div class="frontTextBox"><i>"This taste good!"</i></div></div>
</div>
等等。
下面是我在我的应用程序中构建代码的方式:
HtmlWeb loader = new HtmlWeb();
HtmlDocument doc = loader.Load(stringUrl);
HtmlNode parentNode = doc.GetElementById(ab100_ab100_ab100_Main_Sub_Sub_objComponent);
HtmlNodeCollection allNodes = parentNode.SelectNodes(".//div[@class='row']");
我有我的 div 集合,但我无法进行下一步。首先要明白上面的html代码的布局会发生变化,所以有时firstProp不会显示有时是第六个prop,等等。
所以我想检查节点的属性是否是“标签”:
foreach (HtmlNode htmlNode in allNodes)
{
if (htmlNode.Attributes["class"].Value == "label")
{
}
}
但是我不知道如何检查之后的值,因为下一个兄弟是一个空的 div。而且我不太了解 HtmlAgilityPack 是如何工作的,所以我想知道是否有更简单的方法来获得它。
任何人都可以建议我如何进行,或者如果我在做什么是错误的以及如何纠正它?
* 编辑 *
我改变了这一行:
HtmlNodeCollection allNodes = parentNode.SelectNodes(".//div[@class='row']");
所以现在我的收藏范围只缩小到我会得到的 div。但是当我得到一个类为“label”的 div 时,我仍然需要阅读,读取它的值是什么(例如:Front Text),如果那是 Front Text,则获取以下类为“value”的 div。
我建议您学习一些由 Html Agility Pack 支持的XPATH,它允许对 HTML DOM 进行简洁的查询。例如,下面的代码:
HtmlDocument doc = new HtmlDocument();
doc.Load("test.htm");
HtmlNode node = doc.GetElementbyId("ab100_ab100_ab100_Main_Sub_Sub_objComponent");
foreach (HtmlNode row in node.SelectNodes(".//div[@class='row']"))
{
Console.Write(row.SelectSingleNode("div[@class='label']").InnerText.Trim());
Console.WriteLine(row.SelectSingleNode("div[@class='value']").InnerText.Trim());
}
会输出这个:
First Name:Albert Trebla
Second Year:
Classy Stuff:7
Weather:Cloudy - Might Rain
Front Text:OpenedThe shop is opened when the bridges are lowered.
Flavor:"This taste good!"
如果您需要值或标签 div 中的 HTML,那么您可以再次从那里发出 XPATH 查询。
作者:黑洞官方问答小能手
链接:http://www.qianduanheidong.com/blog/article/485125/ef505524f8c52278a736/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!