【问题标题】:XPath in VB.NET with HTML Agility pack带有 HTML 敏捷包的 VB.NET 中的 XPath
【发布时间】:2012-11-02 03:24:20
【问题描述】:

我有以下 vb.net 代码可以正常工作,并且在消息框中我看到了具有 id 属性的元素的确切数量。

Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id]")
 MsgBox(hreftext.Count)

现在的问题是,当我在消息框上使用以下内容时,尽管有 6 个 id 为 rso 的元素,但它给我的对象引用未设置为对象的实例

Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id='rso']")
 MsgBox(hreftext.Count)

第二个sn-p有什么问题吗?

【问题讨论】:

  • 它应该可以工作。你能给我们原始的 HTML 来检查吗?
  • 另外,检查案例。 XPath 区分大小写。
  • 你知道你可以从谷歌浏览器复制xpath。只需检查元素,然后右键单击以复制 xpath,然后至少您确定要使用哪个 xpath。

标签: vb.net xpath html-agility-pack


【解决方案1】:

阅读了您的另一个 SO 问题后,您似乎正在尝试搜索谷歌购物,并且忽略了检查下载的 html 源代码,而不是生成的 dom。

id“rso”没有出现在 html 源代码中,这就是您收到错误的原因。 谷歌并不热衷于被刮,而且肯定会让它变得困难。

要明白我的意思,您可以在表单中添加一个多行文本框并添加它而不是当前的 xpath 代码:

TextBox1.Text = htmldoc.DocumentNode.OuterHtml

是不是很漂亮!!

【讨论】:

    【解决方案2】:

    详细检查案例:

    试试:

    Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[translate(@id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='rso']")
     MsgBox(hreftext.Count)
    

    抓取任何等于 'rso' 任意大小写组合的节点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-01
      • 2012-08-09
      • 1970-01-01
      • 2010-12-19
      • 2015-02-16
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多