Html Agility Pack解析html小结
来源:互联网 发布:手机免费起名软件 编辑:程序博客网 时间:2024/06/04 18:59
这两天用到了Html Agility Pack解析html,这东西官方没有文档,不过网上还是有很多资料的,虽然雷同总比没有好.它的网站是 http://htmlagilitypack.codeplex.com
下载下来是一个dll文件直接在工程里引用就可以了.
第一步,加载HTML文件
加载主是HtmlDocument类的load方法完成,里面提供了多种加载方式,看方法的参数类型就一目了然了,主要分两类从Stream和物理路径path加载
public void Load(Stream stream);
public void Load(TextReader reader);
public void Load(Stream stream, bool detectEncodingFromByteOrderMarks);
public void Load(Stream stream, Encoding encoding); //指定了编码格式
public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks);
public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize);
public void Load(string path);
public void Load(string path, bool detectEncodingFromByteOrderMarks);
public void Load(string path, Encoding encoding);
public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks);
public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize);
public void LoadHtml(string html);//直接从html字符串加载,这个用的比较多的
- //从字符串加载
- HtmlDocument doc = new HtmlDocument();
- string html = "<div id="wapper"><h1>Hello World!</h1><p>article content</p></div>";
- doc.LoadHtml(html);
第二步,解析html
首先需要了解几个相关的类和方法
HtmlNode 表示一个节点
HtmlNodeCollection 表示一个节点集合
DocumentNode 文档根节点,本身也是一个HtmlNode
HtmlAttribute 表示节点属性
- string htmlstr="<div id=\"wapper\"><><p id=\"pid\">article content...</p><p>article content...article content...</p></div>"
- HtmlDocument parser = new HtmlDocument();
- parser.LoadHtml(htmlstr);
- //使用xpath表达式查找所有P标签
- HtmlNodeCollection nodes = parser.DocumentNode.SelectNodes("//p");
- foreach (HtmlNode tmpNode in nodes)
- {
- if (tmpNode.Attributes["pid= null)
- {
- //取节点属性ID的值
- string pid = tmpNode.Attributes["pid"].value;
- string text = tmpNode.InnerText;
- //创建一个新节点
- HtmlNode newNode = HtmlNode.CreateNode("<font size=" + size + ">" + text + "</font>");
- //替换子节点
- tmpNode.ParentNode.ReplaceChild(newNode, tmpNode);
- }
- else
- {
- HtmlNode rvNode = tmpNode.ParentNode.RemoveChild(tmpNode, true); //删除标签,但保留标签内文本
- }
- }
这里要注意的是在获取属性值时,如果某一个属性名称不存在的话,Attributes["attriname"]返回的是null值
HtmlNode类的几个重要属性
FirstChild,LastChild,ChildNodes,ParentNode 这几个不用多说跟DOM里一样
public HtmlNodeCollection ChildNodes { get; }
public virtual string InnerHtml { get; set; }
public virtual string InnerText { get; } //注意这个是只读的
public HtmlNode NextSibling { get; }
public HtmlNode PreviousSibling { get; }
HtmlNode类的重要方法
GetElementbyId(string id) 使用元素ID取得该元素
获取父节点的系列方法:
1)public IEnumerable<HtmlNode> Ancestors()
获取当前节点的父节点列表(不包含自身)。
2)public IEnumerable<HtmlNode> Ancestors(string name)
以指定一个名称来获取父节点的列表(不包含自身)。
3)public IEnumerable<HtmlNode> AncestorsAndSelf()
获取当前节点的父节点列表(包含自身)。
4)public IEnumerable<HtmlNode> AncestorsAndSelf(string name)
以指定一个名称来获取父节点的列表(包含自身)。
获取子节点的系列方法:
1)public IEnumerable<HtmlNode> DescendantNodes()
获取当前节点下的所有子节点的列表,包括子节点的子节点(不包含自身)。
2)public IEnumerable<HtmlNode> DescendantNodesAndSelf()
获取当前节点下的所有子节点的列表,包括子节点的子节点(包含自身)。
3)public IEnumerable<HtmlNode> Descendants()
获取当前节点下的直接子节点的列表(不包含自身)。
4)public IEnumerable<HtmlNode> DescendantsAndSelf()
获取当前节点下的直接子节点的列表(包含自身)。
5)public IEnumerable<HtmlNode> Descendants(string name)
获取当前节点下的以指定名称的子节点列表。
6)public IEnumerable<HtmlNode> DescendantsAndSelf(string name)
获取当前节点下的以指定名称的子节点的列表(包含自身)。
7)public HtmlNode Element(string name)
获取第一个符合指定名称的直接子节点的节点元素。
8)public IEnumerable<HtmlNode> Elements(string name)
获取符合指定名称的所有直接子节点的节点列表。
9)public HtmlNodeCollection SelectNodes(string xpath)
获取符合指定的xpath的子节点列表。
10)public HtmlNode SelectSingleNode(string xpath)
获取符合指定的xpath的单个字节点元素。
操作系列方法
public void Remove();
public void RemoveAll();
public void RemoveAllChildren();
public HtmlNode RemoveChild(HtmlNode oldChild);
public HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren);
public HtmlNode ReplaceChild(HtmlNode newChild, HtmlNode oldChild);
public HtmlNode InsertAfter(HtmlNode newChild, HtmlNode refChild);
public HtmlNode InsertBefore(HtmlNode newChild, HtmlNode refChild);
HtmlDocument类的重要方法
public HtmlAttribute CreateAttribute(string name);
public HtmlAttribute CreateAttribute(string name, string value);
public HtmlNode CreateElement(string name);
public XPathNavigator CreateNavigator();
public HtmlTextNode CreateTextNode();
public HtmlTextNode CreateTextNode(string text);
public HtmlNode GetElementbyId(string id);
- Html Agility Pack解析html小结
- Html Agility Pack解析html小结
- .Net C# 解析 HTML -- Html Agility Pack
- Html Agility Pack解析Html -- Q&A
- Html Agility Pack解析HTML页
- 开源项目Html Agility Pack实现快速解析Html
- Html Agility Pack (HAP):c# HTML 解析利器
- Html Agility Pack简单例子
- HTML Agility Pack 搭配 ScrapySharp
- Html Agility Pack 处理通配符
- A Great HTML Parser-Html Agility Pack
- Html Agility Pack (HAP) 应用入门
- 【技术贴收集】开源项目Html Agility Pack实现快速解析Html
- Html Agility Pack ── 一个分析HTML的工具
- Html Agility Pack ── 一个分析HTML的工具
- Html Agility Pack ── 一个分析HTML的工具
- Html Agility Pack基础类介绍及运用
- HTML Agility Pack for Windows Phone 7 (WP7)
- gluPerspective
- 关于Android手机内存ROM、RAM还有SD卡的重要解释
- LDD3读书笔记----内存映射
- djangorestframework安装
- 浅谈音频编码标准发展现状及发展趋势
- Html Agility Pack解析html小结
- Android中APK安装过程及原理解析
- WinCE开机logo调试小记
- 让Android应用程序支持安装到SD卡(APP2SD)
- 分享些教学视频,也推广下链接、赚点积分...帮忙哦
- 关于设计表时应该注意的问题
- C# 获取当前路径方法
- linux用户带密码迁移 LDAP
- 解决Xcode中运行出现"cannot run using the selected device"、"cannot run on the selected destination"或无反应问题