如何编写从html获取href的xpath字符串
我想从以下位置获取href链接:如何编写从html获取href的xpath字符串,html,xpath,html-agility-pack,Html,Xpath,Html Agility Pack,我想从以下位置获取href链接: <a class="abc" href="/subsite/2014/05/19/site.html"> <p>test1</p><p>test2</p> </a> …InnerHtml变成了test1test2,而不是HtmlAgilityPack creator解释的href…中的链接,您不能直接使用SelectNodes()来获取属性(正如方法名称和返回类型所暗示的,这意味着选择节点
<a class="abc" href="/subsite/2014/05/19/site.html"> <p>test1</p><p>test2</p> </a>
…InnerHtml变成了
test1test2
,而不是HtmlAgilityPack creator解释的href…中的链接,您不能直接使用SelectNodes()
来获取属性(正如方法名称和返回类型所暗示的,这意味着选择节点)
你需要用不同的方法来做。尝试选择节点而不是属性,然后可以使用LINQ扩展方法提取每个选定节点的属性,例如:
var attrs = doc.DocumentNode
.SelectNodes("//a[@class='abc' and @href]")
.Select(o => o.Attributes["href"]);
正如@Tomalak链接中所述,这也会起作用
//Load navigator for current document
HtmlNodeNavigator navigator = (HtmlNodeNavigator)doc.CreateNavigator();
//Get value from given xpath
string xpath = "//a[@class='abc']/@href";
var val = navigator.Select(xpath);
“获取abc元素”是什么意思?XPath表达式是正确的,它实际上会选择
href
属性。但是:迭代得到的元素以提取单个属性值。@lwburk:请参见我的编辑。@Tomalak结果中不包含链接。它在OuterHtml中,但我必须比迭代前更接近实际URL。您可以执行类似于doc.DocumentNode.SelectNode(“//a[@class='abc']”)的操作吗?getAttribute(“href”)
?
//Load navigator for current document
HtmlNodeNavigator navigator = (HtmlNodeNavigator)doc.CreateNavigator();
//Get value from given xpath
string xpath = "//a[@class='abc']/@href";
var val = navigator.Select(xpath);