如何使用HTML Agility Pack提取HTML中的指定数值18.2099?
解决HTML Agility Pack提取标签内容的问题
问题根源
你代码里的XPath查询用了dbo,但目标HTML里的标签是<bdo>——纯粹是拼写错误,这才导致节点查询返回null。
修正后的代码
把XPath里的dbo改成bdo,同时加上空节点判断避免空引用异常:
var htmlText = await response.Content.ReadAsStringAsync(cancellationToken); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(htmlText); // 修正拼写错误:dbo → bdo var htmlNode = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='last u-up']/bdo[@class='last-price-value']"); // 先判断节点是否存在,再解析内容 if (htmlNode != null && decimal.TryParse(htmlNode.InnerText.Trim(), out var value)) { return value; } // 处理节点不存在或解析失败的情况 return default; // 或者抛出异常、返回特定值
额外优化建议
如果目标元素的class可能存在多个值(比如顺序变化、新增其他class),用contains来匹配class更稳妥,避免严格匹配导致失败:
var htmlNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class, 'last u-up')]/bdo[contains(@class, 'last-price-value')]");
另外解析decimal时,建议指定文化信息(比如针对英文小数点格式),避免因系统区域设置导致解析失败:
if (htmlNode != null && decimal.TryParse(htmlNode.InnerText.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture, out var value)) { return value; }
内容的提问来源于stack exchange,提问作者R4nc1d
相关产品推荐
相关产品推荐

