使用从同一HtmlNode检索的XPath无法获取HtmlNode

时间:2017-11-23 03:45:08

标签: xpath html-agility-pack

XPath的属性HtmlNode,如果我这样做并使用它从根HtmlNode获取单个节点,它会给我异常Expression must evaluate to a node-set.'

所以这就是我在做什么:

HtmlNode someNode=getNode(rootNode);
HtmlNode foundNode=rootNode.SelectSingleNode(someNode.XPath);

通话期间结构不会改变。任何线索为什么它不工作?我得到XPath,如下所示:/html[1]/body[1]/main[1]/div[1]/div[1]/div[2]/form[1]/div[2]/#text[1]

2 个答案:

答案 0 :(得分:1)

我认为这很重要。因为你的xpath中的第一个是乱七八糟的,如果他们只改变他们网站上的一个小东西就很难维护。以下任何方式都是正确的做法。

HtmlNode n = doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/main[1]/div[1]/div[1]/div[2]/form[1]/div[2]/text()[1]");

 Console.WriteLine(n.InnerText);

更容易获得它就是这样。

HtmlNode n = doc.DocumentNode.SelectSingleNode("//div[@class='alert alert-error'][string-length(normalize-space(text()))>0]");

这里我们选择div-tag,其class属性等于'alert alert-error'。但是如果它的长度大于0,我们只想要它。

答案 1 :(得分:0)

如果不向我们提供一些代码,我们很难弄清问题是什么。

如果您只想查找特定字符串,我建议您使用xpath functions,如下所示:

"//*[contains(text(), 'string you are looking for')]"