HtmlAgilityPack使用——XPath注意事项

本文介绍了在使用HtmlAgilityPack进行HTML解析时遇到的XPath注意事项,包括节点类型的理解和"//"与"./"的区别。作者强调了HtmlAgilityPack严格遵循XPath规范,将文本节点视为独立节点,可能导致某些路径表达式失效。此外,讨论了如何正确处理FirstChild、LastChild等关系,以及"//"和"./"在选择节点时的不同行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用HtmlAgilityPack这个开源的类库进行网页内容解析的时候是非常的方便(使用方法见另一篇博客《HTML解析:基于XPath的C#类库HtmlAgiliytyPack》),其基于XPath路径语法进行高效的选择文档节点,当发起请求获取了网页html文件的时候,解析的大部分工作量就落到了XPath路径表达式的书写了。本文测试在VS2010开发环境,.NetFramework 4.0 C#语言,使用的html如下:

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
   <head>
 	<title>test</title>
   </head>
   <body>
     	<div id="content">
            <div>
				<a href="http://www.google.com">google</a>
				<div>gmail</div>
				<div>google earth</div>
            </div>
			<div>
				<a href="http://www.baidu.com">baidu</a>
			</div>
			<div>
				<a href="http://www.tmall.com">tmall</a>
			</div>
		</div>
   </body>
 </html>

1、HtmlAgilityPack节点类型

在使用XPath表达式选择文档特定节点的时候,我发现有时候按照上下文写出的路径表达式就是失效,或者选择出错到了错误的内容,或者由于SelectSingleNode或者SelectNodes这个两个函数使用相应的XPath表达式查询的时候找不到结果而跑出异常。后来发现,HtmlAgilityPack对节点的选择严格按照XPath的规范来实现,XPath规范中严格定义了七种类型的节点(http://www.w3school.com.cn/xpath/xpath_nodes.asp):元素(Element),属性(Attribute),文本(Test),命名空间,处理指令,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值