编程语言
首页 > 编程语言> > c#-XPath表达式在HtmlAgilityPack中不起作用

c#-XPath表达式在HtmlAgilityPack中不起作用

作者:互联网

我知道这可能是我对XPath的不了解,但请允许我确认一下,因为我已经在Google上进行了足够的搜索.

我有一个网站,希望从中获得新闻标题:www.farsnews.com(波斯语)

在firefox下使用FireBug和FireXpath扩展,并手动提取和测试与标题匹配的多个Xpath表达式,例如:

* html/body/div[2]/div[2]/div[2]/div[*]/div[2]/a/div[2]
* .//*[@class="topnewsinfotitle "]
* .//div[@class="topnewsinfotitle "]

我还使用XPather扩展对它们进行了测试,它们似乎工作得很好,但是当我对其进行测试时……SelectNodes返回null!

有任何线索或提示吗?

这是代码的一部分:

listBox2.ResetText();

HtmlAgilityPack.HtmlWeb w = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = w.Load("http://www.farsnews.com");
HtmlAgilityPack.HtmlNodeCollection nc = doc.DocumentNode.SelectNodes(".//div[@class=\"topnewsinfotitle \"]");

listBox2.Items.Add(nc.Count+" Items selected!");

foreach (HtmlAgilityPack.HtmlNode node in nc) {
            listBox2.Items.Add(node.InnerText);
        }

谢谢.

解决方法:

我已经测试了你的表情.正如Dialecticus在评论中所提到的那样,您有一个结尾空间,该空格不应存在.

//div[@class='topnewsinfotitle ']/text()

返回“空序列”,请参阅评估:http://xmltools.dk/EQA-ACA6

//div[@class='topnewsinfotitle']/text()

返回标题列表,请参阅:http://xmltools.dk/EgA2APAj

但是,如果可能还有其他类,请使用以下代码(http://xmltools.dk/EwA8AJAW):

//div[contains(@class, 'topnewsinfotitle')]/text()

(我看到它们是我提供的链接中的编码问题,但是,对于含义和所有XPath表达式都无关紧要,您可以删除/ text()以获得节点,而不仅仅是文本)

但是,如果您拥有此站点,则应在头条新闻中提供XML(可能是RSS或ATOM)或JSON,它们将具有更好的性能,并且最重要的是,它更防弹.

标签:xpath,html-agility-pack,c
来源: https://codeday.me/bug/20191105/1998195.html