Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写从html获取href的xpath字符串_Html_Xpath_Html Agility Pack - Fatal编程技术网

如何编写从html获取href的xpath字符串

如何编写从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()来获取属性(正如方法名称和返回类型所暗示的,这意味着选择节点

我想从以下位置获取href链接:

<a class="abc" href="/subsite/2014/05/19/site.html"> <p>test1</p><p>test2</p> </a>

…InnerHtml变成了
test1

test2

,而不是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);