如何使用htmllagilitypack解析这个HTML文本
本文关键字:HTML 文本 何使用 htmllagilitypack | 更新日期: 2023-09-27 18:11:26
下面是行代码,
<td class="line1left"><a href="scenario_WLM-16-SCENARIOS.html#population_SCN02_MS_AddNotes_CAM">SCN02_MS_AddNotes_CAM</a></td><td class="line1left">798 (6.14%)
</td><td class="line1left">0.9</td><td class="line1left">0s (<span> - %</span>)
</td><td class="line1left">0% (<span class="goodPercentage">-100%</span>)
</td>
<td class="line1left"><a href="scenario_WLM-16-SCENARIOS.html#population_SCN05_MS_UpdateCustomer_CAM">SCN05_MS_UpdateCustomer_CAM</a></td><td class="line1left">888 (6.83%)
</td><td class="line1left">1.0</td><td class="line1left">0s (<span> - %</span>)
</td><td class="line1left">0% (<span class="goodPercentage">-100%</span>)
</td>
从第一个块,我需要得到SCN02_MS_AddNotes_CAM
和798
。为了得到798
,我使用这个代码,但我也得到了(6.14%)
,这是我不想要的。
var content1 = doc1.DocumentNode.SelectNodes("//td[@class='line1left']")[1].InnerText;
我只想得到798
。有人能帮帮我吗?
我还想知道如何从第二个块中获得相同的值。我的印象是括号内的数字代表line1left
类的不同出现次数。但这里它代表不同的InnerHtml
元素。
[1]
有人知道怎么让这个工作吗?
提前谢谢你。
var line1left_list = (from d in document.DocumentNode.Descendants()
where d.Name == "td " && d.Attributes["class"] != null
&& (d.Attributes["class"].Value == "line1left")
select d);
foreach (HtmlNode line1left in line1left_list)
{
var _link = line1left.Descendants("a").FirstOrDefault();
string linkUrl = "";
string link = "";
if (_link != null)
{
linkUrl = _link.Attributes["href"].Value;
link = _link.InnerText
}
}
看起来你想要所有<td>
标签的InnerText类属性为"line1left",除非<td>
里面有一个<a>
,在这种情况下你想要<a>
的InnerText。
下面就是这样一个例子。如果<td>
有<a>
,则选择<a>
,否则选择<td>
。
HtmlDocument doc1 = new HtmlDocument();
doc1.Load("xmlfile2.xml");
var nodes = doc1.DocumentNode.SelectNodes("(//td[@class='line1left']/a) | (//td[@class='line1left' and not(a)])");
foreach(var node in nodes)
Console.WriteLine(node.InnerText.Trim());
这将选择文档中的所有节点。你可以使用常规的c#代码来去掉单个值上不需要的格式