【问题标题】:How does this XPATH query differentiate?这个 XPATH 查询如何区分?
【发布时间】:2010-06-08 08:47:57
【问题描述】:

我有点重复this question,因为主要是由于我自己的无知,我无法完全理解内情。

鉴于这个 HTML sn-p

<td valign=top class="tim_new">
  <a href="/stocks/company_info/pricechart.php?sc_did=MI42" class="tim_new">3M India</a>
</td>
<td class="tim_new" valign=top>
  <a href='/stocks/marketstats/indcomp.php?optex=NSE&indcode=Diversified' class=tim>Diversified</a>
</td>

这个 XPATH //a[@class='tim_new'] 如何区分第 1 行和第 2 行。

【问题讨论】:

  • “区分”是什么意思?
  • var links = doc.DocumentNode.SelectNodes("//a[@class ='tim_new']").Select(n =&gt; n.Attributes["href"].Value); 这个 HTMLAgility-XPATH 查询只返回第一行链接。那么这个 XPATH 查询如何区分,就像它如何区分 sn-p 中的 line1 和 line 2 之间的区别?因为两条线都有 class="tim_new"。

标签: c# xpath html-agility-pack


【解决方案1】:

分解你的 XPath:

// - 这将在 XML 中的任何位置搜索匹配项,而不是寻找明确的“路径”。

a - 这将匹配所有 a 元素。因此,您的其他元素(在本例中为 td)将被忽略。

[@class='tim_new'] - 这将匹配名为class 的属性与tim_new 的值。

所以总的来说,您的 XPath 将在输入 XML(在本例中为 HTML)中查找a 元素,该元素的属性为class,值为tim_new

如果您想匹配 td 元素,则可以使用 //td[@class='tim_new']

【讨论】:

  • 所以根据这个逻辑,//a[@class=tim] 将提取/寻找与第二行具有相似特征的行?
  • @Soham:XPath //a[@class='tim'] 将匹配示例 HTML 中的第二个 a 元素。
  • 哦,所以匹配的是属性值,而不是字符串本身。例如,您如何建议我提取第二行中的超链接词,在本例中为“Diversified”。请注意,同一个 XML/HTML 文件中还有许多其他行,带有 a 元素
  • 所以,起初我认为 //a 会产生一些有趣的东西,但它会以这种方式返回所有内容。
  • 好的,我不知道是否可以使用 XPATH 提取它,但是 .SELECT(n => n.InnerText);解决了。但想听听你的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多