You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HtmlAgilityPack中如何从指定父节点获取time元素的datetime属性前四位

问题分析与修改方案

你的问题出在XPath的路径选择上:原来的//time是绝对路径,它会从整个HTML文档的根节点开始遍历,找到第一个匹配的<time>元素,而不是从你定位到的父节点下查找。

修改后的代码

要解决这个问题,只需要把XPath改成相对路径,在//time前面加上.(代表当前节点,也就是你已经定位到的父节点),这样就会限制搜索范围在目标父节点的后代节点中:

// 先获取目标父节点(保留你原来的定位逻辑)
var targetParent = htmlDoc2.DocumentNode.SelectSingleNode("//a[@title='"+ entry.Value + "']").ParentNode;

// 使用相对路径查找当前父节点下的time元素
var timeElement = targetParent.SelectSingleNode(".//time");

// 增加空值判断,避免空引用异常
if (timeElement != null && timeElement.Attributes["datetime"] != null)
{
    var iets = timeElement.Attributes["datetime"].Value.Substring(0, 4);
    // 这里可以处理获取到的年份值
}

关键说明

  • .//time:.表示从当前节点(targetParent)开始,//表示查找该节点下所有层级的后代节点中的<time>元素,正好匹配你HTML结构里的嵌套关系。
  • 增加空值判断是个好习惯:如果因为HTML结构变化或者目标节点不存在,能避免程序抛出NullReferenceException。

内容的提问来源于stack exchange,提问作者Kev_T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:12:53