当前位置: 首页 > Web前端 > JavaScript

HtmlAgilityPack使用xpath获取属性值

时间:2023-03-27 13:45:39 JavaScript

HtmlAgilityPack简介HtmlAgilityPack是一个专门用来解析Html的库,它可以使用xml来解析html。有人说,html本身不就是xml吗?是的,html就是xml,但是html很松散,也可以使用不封闭的节点,里面夹杂了一些js等其他内容。如果直接使用xml解析库,90%会报错。而HtmlAgilityPack会处理这些问题,将Html转换成接近标准的xml供我们使用。网上关于HtmlAgilityPack的介绍其实很多,用法其实也就三言两语。vardoc=newHtmlAgilityPack.HtmlDocument();doc.LoadHtml(html);varroot=doc.DocumentNode;这个没什么好说的,主要是doc.LoadHtml(html);这里是doc.Load()的重载,你可以直接放url或者stream进去。这里我们使用LoadHtml直接加载html内容主要是因为我们在获取html的时候可能还需要其他的东西,需要单独获取。最后一个varroot=doc.DocumentNode;这个root就是节点,整个html的根目录。然后很多文章说我们要获取Node,也就是使用varnode=root.SelectSingleNode("xpath");这个肯定没问题,然后如果我们想获取它的属性,我们可以使用这个Node的node.GetAttributeValue("name",default);获取内容。比如我们要获取id为test的a标签的href,可以写一个例子vardoc=newHtmlAgilityPack.HtmlDocument();doc.LoadHtml(html);varroot=doc.DocumentNode;varnode=root.SelectSingleNode("//a[@id='test']");varhref=GetAttributeValue("href","");这样我们就可以得到href。是不是很简单?直接获取属性值上面的例子看起来不错,但是有一个比较麻烦的问题,就是有时候我们想直接获取属性值。比如我有一个xpath是这样的//a[@id='test']/@href,如果我们还是用上面的代码插入的话。vardoc=newHtmlAgilityPack.HtmlDocument();doc.LoadHtml(html);varroot=doc.DocumentNode;varnode=root.SelectSingleNode("//a[@id='test']/@href");我们的节点是href的值吗?经过测试,没有,这里的节点还是a。所以我们不能这样直接获取。经过一番查询,发现HtmlAgilityPack提供了一个HtmlNodeNavigator来实现这个需求。vardoc=newHtmlAgilityPack.HtmlDocument();doc.LoadHtml(html);varroot=doc.DocumentNode;HtmlNodeNavigator导航器=(HtmlNodeNavigator)root.CreateNavigator();varnode=navigator.SelectSingleNode("//a[@id='test']/@href");varhref=node.Value;

最新推荐
猜你喜欢