C#中如何类似jquery一样解析HTML节点

Html Agility Pack是一个开源的解析HTML元素的类库。可以在C#中直接操作,类似于XML操作方法。操作还是比较好理解的。

1、在NuGet中安装: PM>Install-Package HtmlAgilityPack -Version 1.8.2

https://www.nuget.org/packages/HtmlAgilityPack 这里可以有较多的版本选择。

在项目中HtmlAgilityPack.dll

2、下面就直接看代码理解

// 根据路径加载  
var path = @"test.html";          
var doc = new HtmlDocument();  
doc.Load(path);  
var node = doc.DocumentNode.SelectSingleNode("//body");  
Console.WriteLine(node.OuterHtml);

// 根据页面字符串解析  
var html = @"<!DOCTYPE html>  
<html>  
<body>  
    <h1>This is <b>bold</b> heading</h1>  
    <p>This is <u>underlined</u> paragraph</p>  
    <h2>This is <i>italic</i> heading</h2>  
</body>  
</html> ";  
  
var htmlDoc = new HtmlDocument();  
htmlDoc.LoadHtml(html);  
var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");  
Console.WriteLine(htmlBody.OuterHtml);

// 直接加载网页内容解析  
var html = @"http://html-agility-pack.net/";  
HtmlWeb web = new HtmlWeb();  
var htmlDoc = web.Load(html);  
var node = htmlDoc.DocumentNode.SelectSingleNode("//head/title");  
Console.WriteLine("Node Name: " + node.Name + "\n" + node.OuterHtml);

3、接下来就是要对节点进行操作,获取节点、追加节点、删除节点

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
// 获取TD下input标签SelectNodes
var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//td/input");
// 获取第一个匹配的节点SelectSingleNode
string name = htmlDoc.DocumentNode
    .SelectSingleNode("//td/input")
    .Attributes["value"].Value;
// 根据ID获取节点
var htmlSelect = htmlDoc.GetElementbyId("ID");
// 创建节点信息
HtmlNode h2Node = HtmlNode.CreateNode("<h2> This is h2 heading</h2>");
// 追加节点在末尾
htmlSelect.AppendChild(h2Node);
// 追加节点在起始位置
htmlSelect.PrependChild(h2Node);

// 下面是集合节点集合
var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
		
HtmlNode h2Node = HtmlNode.CreateNode("<h2> This is h2 heading</h2>");
HtmlNode pNode1 = HtmlNode.CreateNode("<p> This is appended paragraph 1</p>");
HtmlNode pNode2 = HtmlNode.CreateNode("<p> This is appended paragraph 2</p>");

HtmlNodeCollection children = new HtmlNodeCollection(htmlBody);

children.Add(h2Node);
children.Add(pNode1);
children.Add(pNode2);

htmlBody.AppendChildren(children);
// 移除节点
var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
HtmlNode node = htmlBody.ChildNodes[1];
node.Remove();  // 或者 node.RemoveAll();
// htmlBody.RemoveAllChildren();

// 最后上一个设置属性的例子
var h1Node = htmlDoc.DocumentNode.SelectSingleNode("//h1");
h1Node.Attributes.Append("style");
h1Node.SetAttributeValue("style", "color:blue");
相信这些操作方式大家还是比较熟悉的,下载下dll便可以查看到里面的各个方法,还是比较好理解的,是不是很像jquery的操作。




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值