【问题标题】:htmlagilitypack getting an element's node by the namehtmlagilitypack 通过名称获取元素的节点
【发布时间】:2013-08-07 15:11:30
【问题描述】:

如何通过名称获取元素的节点。有GetElementById,为什么没有GetElementByName。有问题的元素是:

   <select class="box1" name="DAY" tabindex="31"> … </select>

我希望能够得到这个节点。但我不知道怎么做。

Pete:请删除已回答此问题。自己去试试是完全错误的。 node.Name 不是属性“名称”的名称,它的标记名不是我需要的。

【问题讨论】:

  • 我尝试了很多次,但我无法让它工作。 var forms = document.DocumentNode.Descendants("form");只给我 1 个后代 xe.Name == "DAY");以及 0size 集合
  • 错误的 node.Name != 'name=DAY' 属性或 w,e,它是

标签: c# html html-agility-pack


【解决方案1】:

您没有访问后代中“select”标签的名为“name”的节点属性。您正在使用标签的属性名称 (xe.Name)。正确的做法可以是:

document.DocumentNode.Descendants("select").Where(node => node.GetAttributeValue("name", "").Equals("DAY", StringComparison.InvariantCultureIgnoreCase));

【讨论】:

  • 注意那些没有名字的节点,否则你会得到一个 NullPointerException。 node.Attribute["name"].Value.Equals("DAY") 可以替换为 node.GetAttributeValue("name", "") == "DAY"。
  • 我几分钟前就意识到了。感谢您指出。另外要注意的是字符串比较,不能保证大小写,所以用忽略大小写选项比较比较安全(使用string.Equals)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多