网站备案完成后,电子商务网站建设项目规划书,有个做特价的购物网站,海外推广解决方案XPath路径表达式#xff0c;主要是对XML文档中的节点进行搜索#xff0c;通过XPath表达式可以对XML文档中的节点位置进行快速定位和访问#xff0c;html也是也是一种类似于xml的标记语言#xff0c;但是语法没有那么严谨#xff0c;在codeplex里有一个开源项目HtmlAgility…XPath路径表达式主要是对XML文档中的节点进行搜索通过XPath表达式可以对XML文档中的节点位置进行快速定位和访问html也是也是一种类似于xml的标记语言但是语法没有那么严谨在codeplex里有一个开源项目HtmlAgilityPack提供了用XPath解析HTML文件下面掩饰如何使用该类库的使用
首先说下XPath路径表达式
XPath路径表达式用来选取XML文档中的节点或节点集的1、术语节点Node7种类型元素属性文本命名空间处理命令注释文档根节点2、节点关系父Parent子Children同胞Sibling先辈Ancestor后代Descendant3、路径表达式nodename 节点名选取此节点的所有子节点 例 childnode 当前节点中的childnode子节点不包含孙子及以下的节点/ 从根节点选取 例/root/childnode/grandsonnode // 表示所有后代节点 例//childnode 所有名为childnode的后代节点. 表示当前节点 例 ./childnode 表示当前节点的childnode节点.. 表示父节点 例 ../nearnode 表示父亲节点的nearnode子节点选取属性 /root/childnode/id 表示childnode的所有含有id属性的节点集4、谓语Predicates谓语可以对节点集进行一些限制使选择更精确/root/book[1] 节点集中的第一个节点/root/book[last()] 节点集中最后一个节点/root/book[position() - 1] 节点集中倒数第二个节点集/root/book[position() 5] 节点集中前五个节点集/root/book[id] 节点集中含有属性id的节点集/root/book[idchinese] 节点集中id属性值为chinese的节点集/root/book[price 35]/title 节点集中book的price元素值大于35的title节点集5、通配符XPath路径中同样支持通配符**node() text()例 /bookstore/*//title[*]6、XPath轴定义相对于当前节点的节点集ancestor 所有祖先节点attribute 所有属性节点child 所有子元素descendant 所有后代节点子孙。。。following 结束标记后的所有节点 preceding 开始标记前的所有节点following-sibling 结束标记后的所有同胞节点preceding-sibling 开始标记前的所有同胞节点namespace 当前命名空间的所有节点parent 父节点self 当前节点用法轴名称::节点测试[谓语]例 ancestor::bookchild::text()7、运算符| 两个节点集的合并 例/root/book[1] | /root/book[3]-*devmod!orand 或和与//删除注释scriptstylenode.Descendants().Where(n n.Name script || n.Name style || n.Name#comment).ToList().ForEach(n n.Remove());//遍历node节点的所有后代节点foreach(var HtmlNode in node.Descendants()){}HtmlAgilityPack类库用法1、首先需要获取到html页面数据可以通过WebRequest类来获取public static string GetHtmlStr(string url){ try{WebRequest rGet WebRequest.Create(url);WebResponse rSet rGet.GetResponse();Stream s rSet.GetResponseStream();StreamReader reader new StreamReader(s, Encoding.UTF8);return reader.ReadToEnd();}catch (WebException){//连接失败return null;}}2、通过HtmlDocument类加载html数据string htmlstr GetHtmlStr(http://www.hao123.com);HtmlAgilityPack.HtmlDocument doc new HtmlAgilityPack.HtmlDocument();doc.LoadHtml(htmlstr);HtmlNode rootnode doc.DocumentNode; //XPath路径表达式这里表示选取所有span节点中的font最后一个子节点其中span节点的class属性值为num//根据网页的内容设置XPath路径表达式string xpathstring //span[classnum]/font[last()]; HtmlNodeCollection aa rootnode.SelectNodes(xpathstring); //所有找到的节点都是一个集合if(aa ! null){string innertext aa[0].InnerText;string color aa[0].GetAttributeValue(color, ); //获取color属性第二个参数为默认值//其他属性大家自己尝试}也可以通过HtmlWeb类来获得HtmlDocumentHtmlWeb web new HtmlWeb();HtmlAgilityPack.HtmlDocument doc web.Load(url);HtmlNode rootnode doc.DocumentNode;补充多个属性条件查询 //div[aligncenter and height24]不存在class属性 //div[not(class)]