有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]
答案 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')]"