架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2218|回复: 4

[资料] Html Agility Pack下载以及使用方法

[复制链接]
发表于 2016-8-4 17:05:36 | 显示全部楼层 |阅读模式
下载地址:

http://htmlagilitypack.codeplex.com/

IEnumerable<HtmlNode> Ancestors();               返回此元素的所有上级节点的集合。
IEnumerable<HtmlNode> Ancestors(string name);                         返回此元素参数名字匹配的所有上级节点的集合。
IEnumerable<HtmlNode> AncestorsAndSelf();                          返回此元素的所有上级节点和自身的集合。
IEnumerable<HtmlNode> AncestorsAndSelf(string name);                    返回此元素的名字匹配的所有上级节点和自身的集合。
HtmlNode AppendChild(HtmlNode newChild);                            将参数元素追加到为调用元素的子元素(追加在最后)
void AppendChildren(HtmlNodeCollection newChildren);              将参数集合中的元素追加为调用元素的子元素(追加在最后)
HtmlNode PrependChild(HtmlNode newChild);                     将参数中的元素作为子元素,放在调用元素的最前面
void PrependChildren(HtmlNodeCollection newChildren);              将参数集合中的所有元素作为子元素,放在调用元素前面
static bool CanOverlapElement(string name);                    确定是否可以保存重复的元素
IEnumerable<HtmlAttribute> ChildAttributes(string name);            获取所有子元素的属性(参数名要与元素名匹配)
HtmlNode Clone();                                        本节点克隆到一个新的节点
HtmlNode CloneNode(bool deep);                         节点克隆到一个新的几点,参数确定是否连子元素一起克隆
HtmlNode CloneNode(string newName);                      克隆的同时更改元素名
HtmlNode CloneNode(string newName, bool deep);          克隆的同时更改元素名。参数确定是否连子元素一起克隆
void CopyFrom(HtmlNode node);                          创建重复的节点和其下的子树。
void CopyFrom(HtmlNode node, bool deep);                    创建节点的副本。
XPathNavigator CreateNavigator();                                返回的一个对于此文档的XPathNavigator
static HtmlNode CreateNode(string html);                      静态方法,允许用字符串创建一个新节点
XPathNavigator CreateRootNavigator();                      创建一个根路径的XPathNavigator
IEnumerable<HtmlNode> DescendantNodes();                          获取所有子代节点
IEnumerable<HtmlNode> DescendantNodesAndSelf();                      获取所有的子代节点以及自身
IEnumerable<HtmlNode> Descendants();                     获取枚举列表中的所有子代节点
IEnumerable<HtmlNode> Descendants(string name);               获取枚举列表中的所有子代节点,注意元素名要与参数匹配
IEnumerable<HtmlNode> DescendantsAndSelf();                 获取枚举列表中的所有子代节点以及自身
IEnumerable<HtmlNode> DescendantsAndSelf(string name);    获取枚举列表中的所有子代节点以及自身,注意元素名要与参数匹配
HtmlNode Element(string name);                          根据参数名获取一个元素
IEnumerable<HtmlNode> Elements(string name);                 根据参数名获取匹配的元素集合
bool GetAttributeValue(string name, bool def);                   帮助方法,用来获取此节点的属性的值(布尔类型)。如果未找到该属性,则将返回默认值。
int GetAttributeValue(string name, int def);                     帮助方法,用来获取此节点的属性的值(整型)。如果未找到该属性,则将返回默认值。
string GetAttributeValue(string name, string def);                 帮助方法,用来获取此节点的属性的值(字符串类型)。如果未找到该属性,则将返回默认值。
HtmlNode InsertAfter(HtmlNode newChild, HtmlNode refChild);            将一个节点插入到第二个参数节点的后面,与第二个参数是兄弟关系
HtmlNode InsertBefore(HtmlNode newChild, HtmlNode refChild);          讲一个节点插入到第二个参数节点的后面,与第二个参数是兄弟关系
static bool IsCDataElement(string name);                      确定是否一个元素节点是一个 CDATA 元素节点。
static bool IsClosedElement(string name);                     确定是否封闭的元素节点
static bool IsEmptyElement(string name);                       确定是否一个空的元素节点。
static bool IsOverlappedClosingElement(string text);                 确定是否文本对应于一个节点可以保留重叠的结束标记。
void Remove();                                   从父集合中移除调用节点
void RemoveAll();                                  移除调用节点的所有子节点以及属性
void RemoveAllChildren();                              移除调用节点的所有子节点
HtmlNode RemoveChild(HtmlNode oldChild);                     移除调用节点的指定名字的子节点
HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren);移除调用节点调用名字的子节点,第二个参数确定是否连孙子节点一起移除
HtmlNode ReplaceChild(HtmlNode newChild, HtmlNode oldChild);          将调用节点原有的一个子节点替换为一个新的节点,第二个参数是旧节点
HtmlNodeCollection SelectNodes(string xpath);           根据XPath获取一个节点集合
HtmlNode SelectSingleNode(string xpath);                     根据XPath获取唯一的一个节点
HtmlAttribute SetAttributeValue(string name, string value);             设置调用节点的属性
string WriteContentTo();                               将该节点的所有子级都保存到一个字符串中。
void WriteContentTo(TextWriter outText);                     将该节点的所有子级都保存到指定的 TextWriter。
string WriteTo();                                  将当前节点保存到一个字符串中。
void WriteTo(TextWriter outText);                         将当前节点保存到指定的 TextWriter。
void WriteTo(XmlWriter writer);                            将当前节点保存到指定的则 XmlWriter。





上一篇:HtmlAgilityPack解析html5的xpath节点出错
下一篇:ASP.NET MVC 修改视图的Shared默认路径(MVC2,MVC3)
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2016-8-5 14:45:10 | 显示全部楼层
  1. string img = item_node.SelectSingleNode("img").Attributes["data-original"].Value;
复制代码


获取节点属性的值
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-3-1 17:16:09 | 显示全部楼层

XPath路径表达式

  用来选取XML文档中的节点或节点集的

  1、术语:节点(Node):7种类型:元素,属性,文本,命名空间,处理命令,注释,文档(根)节点

  2、节点关系:父(Parent),子(Children),同胞(Sibling),先辈(Ancestor),后代(Descendant)

  3、路径表达式

   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[@id='chinese']  节点集中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::book

            child::text()

  7、运算符

    |  两个节点集的合并  例:/root/book[1] | /root/book[3]

    +,-,*,dev,mod

    =,!=,<,>,<=,>=

    or,and  或和与
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2018-1-4 16:39:23 | 显示全部楼层
取特定标签属性值 var node = doc.DocumentNode.SelectSingleNode("//span[@prt-id='123']").Attributes["tag"].Value;
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2018-4-16 13:46:02 | 显示全部楼层
QQ截图20180416134336.jpg

如果,我想获取表格的数据,代码如下:

  1. HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
  2.                             doc.LoadHtml(result.Html);
  3.                             var tab = doc.DocumentNode.SelectSingleNode("//table[@class='styled']");
  4.                             if (tab != null)
  5.                             {
  6.                                 var tbody = tab.SelectSingleNode("tbody");
  7.                                 if (tbody != null)
  8.                                 {
  9.                                     var tr = tbody.SelectNodes("tr");
  10.                                     if (tr != null && tr.Any())
  11.                                     {
  12.                                         //删除最后一条数据
  13.                                         tr.RemoveAt(tr.Count - 1);
  14.                                         foreach (var tr_item in tr)
  15.                                         {
  16.                                             var td = tr_item.SelectNodes("td");
  17. .....
  18.                                         }
  19.                                     }
  20.                                 }
  21.                             }
复制代码


效果图如下:

QQ截图20180416134550.jpg
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关闭

站点通知上一条 /1 下一条

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2018-10-18 08:52

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表