如何用Html-Agility-Pack获取HTML标签的ISO语言代码
获取HTML标签的lang属性值(HtmlAgility-Pack)
嗨,我来帮你搞定这个问题!你的代码现在拿的是<html>标签内部的所有文本内容,这显然不是你要的lang属性值,我们来调整一下:
正确的实现代码
var web = new HtmlWeb { UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/10.0" }; var doc = web.Load(url); // 先选中html节点 var htmlNode = doc.DocumentNode.SelectSingleNode("//html"); string langCode = null; // 避免空引用异常,先判断节点是否存在 if (htmlNode != null) { // 从节点的Attributes集合中获取lang属性 var langAttribute = htmlNode.Attributes["lang"]; if (langAttribute != null) { langCode = langAttribute.Value; } } // 现在langCode就是你要的ISO语言代码,比如"en"、"zh-CN"等
关键说明
- 你之前用
InnerText是错误的:这个属性会返回标签包裹的所有文本内容,而不是标签本身的属性值。 - 关于你提到的「DocumentNode没有Attributes属性」:这大概率是个误解——
doc.DocumentNode属于HtmlNode类型,它肯定有Attributes属性。如果编辑器没提示,建议检查一下HtmlAgility-Pack的版本是否过旧,或者重启一下IDE试试。 - 增加空判断很重要:如果页面的html标签没有lang属性,或者页面结构异常找不到html节点,空判断能避免程序抛出空引用异常。
内容的提问来源于stack exchange,提问作者Tobias
相关产品推荐
相关产品推荐

