Select 具有指定子节点的节点
Select a Node which has specified subnodes
我必须写一个网络抓取工具。我的 php 页面是:
<a href="Something.php">
<div class="SPECIFIEDCLASS" title="other something">
</div>
</a>
到目前为止我写的是:
var diiv = doc.DocumentNode.SelectNodes("//a/div[@class='SPECIFIEDCLASS']");
var hrefLiist = diiv.Select(q => q.GetAttributeValue("href", "not found")).ToList()
但它不起作用。
您的 XPath 表达式在 a
个标签内选择具有指定 class 的 div
个标签。
但是你想要的是 a
标签和 div
标签与指定的 class。您应该改为使用此 XPath 表达式:
var diiv = doc.DocumentNode.SelectNodes("//a[div[@class='SPECIFIEDCLASS']]");
更直观的解释:
您的 XPath 对每个 a
标记执行此操作:
- 获取
a
标签。
- 获取子 div 标签。
- Select div 标签带有
Class = "SPECIFIEDCLASS"
。 所以最终,div 标签本身被选中
正确的 XPath 应该这样做:
- 获取
a
标签。
- Select
a
标签,其中:
子 div
标签有 Class = "SPECIFIEDCLASS"
。 这里选择了a标签。
我必须写一个网络抓取工具。我的 php 页面是:
<a href="Something.php">
<div class="SPECIFIEDCLASS" title="other something">
</div>
</a>
到目前为止我写的是:
var diiv = doc.DocumentNode.SelectNodes("//a/div[@class='SPECIFIEDCLASS']");
var hrefLiist = diiv.Select(q => q.GetAttributeValue("href", "not found")).ToList()
但它不起作用。
您的 XPath 表达式在 a
个标签内选择具有指定 class 的 div
个标签。
但是你想要的是 a
标签和 div
标签与指定的 class。您应该改为使用此 XPath 表达式:
var diiv = doc.DocumentNode.SelectNodes("//a[div[@class='SPECIFIEDCLASS']]");
更直观的解释:
您的 XPath 对每个 a
标记执行此操作:
- 获取
a
标签。 - 获取子 div 标签。
- Select div 标签带有
Class = "SPECIFIEDCLASS"
。 所以最终,div 标签本身被选中
正确的 XPath 应该这样做:
- 获取
a
标签。 - Select
a
标签,其中:
子div
标签有Class = "SPECIFIEDCLASS"
。 这里选择了a标签。