【问题标题】:HTML Agility Pack can't find classes with trailing spacesHTML Agility Pack 找不到带有尾随空格的类
【发布时间】:2016-02-26 03:59:30
【问题描述】:
我使用以下代码来解析 HTML 文档:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(pageStr);
HtmlAgilityPack.HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//h3[@class='the-title']");
但找不到以下字符串:
<h3 class="the-title ">
并且仅在从类中删除尾随空格时才有效。
HTML 敏捷包可以自己处理这种情况吗?
【问题讨论】:
标签:
c#
html
parsing
html-agility-pack
【解决方案1】:
'the-title' != "the-title"
您可以通过在 Xpath 查询中使用“包含”功能来解决您的问题
尝试以下方法:
HtmlAgilityPack.HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//h3[contains(@class, 'the-title')]");
【解决方案2】:
在进行比较之前,您可以尝试使用 XPath normalize-space() 删除不必要的空格:
//h3[normalize-space(@class)='the-title']
工作演示示例:
var html = @"<div>
<h3 class='the-title '/>
</div>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var node = doc.DocumentNode.SelectSingleNode("//h3[normalize-space(@class)='the-title']");
Console.WriteLine(node.OuterHtml);
Dotnetfiddle Demo
输出:
<h3 class='the-title '></h3>