如何使用htmlagilitypack解析HTML文本?
问题描述:
所以下面是行代码,如何使用htmlagilitypack解析HTML文本?
<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>
标签与“line1left”的类属性将InnerText,除非<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#代码去除各个值上不需要的格式。
如果“798”总是出现在链接之后,那么可以试试这个_link.Descendants()并获取第一个HtmlNode的内部文本。 – Melad
最后一行“link = _link.InnerText;”总是给我line1left最后(第二个)块的InnerText值。我如何获得第一个区块和所有区块之间的价值? – crossemup
您可以创建一个字符串数组并添加所有的链接。 – Melad