iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >c#常见的问题有哪些
  • 845
分享到

c#常见的问题有哪些

2024-04-02 19:04:59 845人浏览 泡泡鱼
摘要

今天小编给大家分享一下C#常见的问题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

今天小编给大家分享一下C#常见的问题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

  html Agility Pack 源码中的类大概有28个左右,其实不算一个很复杂的类库,但它的功能确不弱,为解析DOM已经提供了足够强大的功能支持,可以跟Jquery操作DOM媲美:)

  Html Agility Pack最常用的基础类其实不多,对解析DOM来说,就只有HtmlDocument和Htmlnode这两个常用的类,还有一个 HtmlNodeCollection集合类。

  当然在解析DOM前需要加载html原始文件或者html的字符串,HtmlDocument类封装了支持此功能的方法,下面是加载html的方法介绍。

  HtmlDocument类定义了多个重载的Load方法来实现以不同方式加载html,其实主要分为两种,一种是从Stream中加载html,另外一种是从物理路径加载html,分别见下面:

  方法:public void Load(TextReader reader)

  说明:从指定的 TextReader对象中加载Html

  示例:

  HtmlDcument doc?=new?HtmlDocument();

  StreamReader sr?=?File.OpenText("file path");

  doc.Load(sr);

  基于上面方法,衍生出了几个不同重载方法。

  以指定的Stream对象为主的有:

  (1)public void Load(Stream stream)? ///从指定的Stream对象中加载html;

  (2)public void Load(Stream stream, bool detectEncodingFromByteOrderMarks)? ///指定是否从顺序字节流中解析编码格式

  (3)public void Load(Stream stream, Encoding encoding)? ///指定编码格式

  (4)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks)

  (5)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)

  以指定的物理路径为主的有:

  (1)public void Load(string path)

  (2)public void Load(string path, bool detectEncodingFromByteOrderMarks)? ///指定是否从顺序字节流中解析编码格式

  (3)public void Load(string path, Encoding encoding)? ///指定编码格式

  (4)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks)

  (5)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)

  HtmlDocument类中还定义了直接从html字符串中加载Html,如下:

  方法:public void LoadHtml(string html)

  说明:从指定的html字符串中加载html

  示例:

  HtmlDocument doc?=new?HtmlDocument();

  string?html?="<div id="demo"><span style="color:red;"><h2>Hello World!</h2></span></div>";

  doc.LoadHtml(html);

  HtmlDocument类还有其他写DOM方法的定义,这里不作详细介绍,留作以后专门介绍Html Agility Pack写DOM章节介绍吧,这里着重介绍Html Agility pack解析DOM的细节。

  通过HtmlDocument把html加载进来后,接着是要做什么呢?当然是对html解析了,解析DOM就需要提到HtmlNode类 了。 HtmlDocument类由属性DocumentNode属性返回当前Html解析后的一个全局的HtmlNode对象;如果想获取某一个元素的 HtmlNode,可以通过HtmlDocument类的GetElementbyId(string Id)方法来获取,返回指定某一个html元素的HtmlNode对象。如何通过HtmlNode对象来访问DOM呢?介绍之前先对它的功能了解下。

  HtmlNode类实现了IXPathNavigable接口,这说明了它可以通过xpath来查询DOM了,如果对System.Xml 命名空间下的 XmlDocument类了解的,特别是使用过了SelectNodes()和SelectSingleNode()方法的朋友对使用HtmlNode类 将会很熟悉。其实Html Agility Pack内部是把html解析成xml文档格式了的,所以支持xml中的一些常用查询方式。下面对HtmlNode的一些主要的常用成员作简要的说明。

  1)Attributes属性

  获取当前Html元素的属性的集合,返回的是一个HtmlAttributeCollection对象。如一个div元素,它可能会定义一些属性, 如:<div id="title" name="title" class="class-name" title="title div">***</div>,那Attributes返回的HtmlAttributeCollection就包含了 “id,name,class,title”的信息。HtmlAttributeCollection类是实现了接口 IList<HtmlAttribute>的一个集合类,故此可以通过下面代码方式访问每一个成员。

  HtmlNode node?=?doc.GetElementbyId("title");

  string?titleValue?=?node.Attributes["title"].Value;

  或者

  foreach(HtmlAttribute attr?in?node.Attributes)

  {

  Console.WriteLine("{0}={1}",attr.Name,attr.Value);

  }

  在获取属性值时,如果某一个属性名称不存在的话,Attributes["name"]返回的是null值。

  2)FirstChild,LastChild,ChildNodes,ParentNode属性

  FirstChild属性:返回所有子节点的第一个节点,如下面代码:

  string?html?="<div id="demo"><span style="color:red;"><h2>Hello World!</h2></span><div id="innerDiv">inner div</div></div>";

  FirstChild则返回的是“<span style="color:red;"><h2>Hello World!</h2></span>” 的节点。

  LastChild属性:返回所有子节点的最后一个节点,以上面的html为例,则返回“<div id="innerDiv">inner div</div>”节点。

  ChildNodes属性:返回当前节点所有直接一代的子节点的集合,不包括跨代子节点,以上面的html为例,则返回“<span style="color:red;"><h2>Hello World!</h2></span>” 和“<div id="innerDiv">inner div</div>”两个节点。

  ParentNode属性:返回当前节点的直接父节点。

  3)获取Html源码和文本

  HtmlNode类设计了OuterHtml属性和InnerHtml属性用于获取当前节点的Html源码。两者不同之处 是,OuterHtml属性返回的是包含当前节点的Html代码在内的所有Html代码,而InnerHtml属性返回的是当前节点里面子节点的所有 Html代码。如下面:

  如要获取节点的文本值,通过InnerText属性来获取,InnerText属性过滤掉了所有的Html标记代码,只返回文本值,如下面:

  Console.WriteLine(node.InnerText);///?return "Hello World!";

  HtmlNode类提供了足够丰富的方法供查询当前节点下的子节点(元素),当然也包括查询当前节点的父节点(元素)的方法,下面列出主要的方法和使用说明。

  获取父节点的系列方法:

  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的单个字节点元素。

  查询节点的方法主要是上面10个方法,该类还有其他写节点的系列方法,这里不详细介绍写操作的方法,留作以后详细介绍。

  结合Xpath进行查询节点是功能比较强大,这像操作xml那样方便。

  简单例子的代码

  下面例子是把博客园的精华区博客列表查询出来。执行结果如下面:

  代码

  using?System;

  using?System.Collections.Generic;

  using?System.Linq;

  using?System.Text;

  using?System.IO;

  using?HtmlAgilityPack;

  namespace?DemoCnBlogs

  {

  class?Program

  {

  staticvoid?Main(string[] args)

  {

  HtmlWEB web?=new?HtmlWeb();

  HtmlDocument doc?=?web.Load("");

  HtmlNode node?=?doc.GetElementbyId("post_list");

  StreamWriter sw?=?File.CreateText("log.txt");

  foreach(HtmlNode child?in?node.ChildNodes)

  {

  if?(child.Attributes["class"]?==null||?child.Attributes["class"].Value?!="post_item")

  continue;

  HtmlNode hn?=?HtmlNode.CreateNode(child.OuterHtml);

  ///如果用child.SelectSingleNode(""titlelnk"]").InnerText这样的方式查询,是永远以整个document为基准来查询,

  ///这点就不好,理应以当前child节点的html为基准才对。

  Write(sw, String.FORMat("推荐:{0}", hn.SelectSingleNode("//*[@class=\"diggnum\"]").InnerText));

  Write(sw, String.Format("标题:{0}", hn.SelectSingleNode("//*[@class=\"titlelnk\"]").InnerText));

  Write(sw, String.Format("介绍:{0}", hn.SelectSingleNode("//*[@class=\"post_item_summary\"]").InnerText));

  Write(sw, String.Format("信息:{0}", hn.SelectSingleNode("//*[@class=\"post_item_foot\"]").InnerText));

  Write(sw,?"----------------------------------------");

  }

  sw.Close();

  Console.ReadLine();

  }

  staticvoid?Write(StreamWriter writer,?string?str)

  {

  Console.WriteLine(str);

  writer.WriteLine(str);

  }

  }

  }

以上就是“c#常见的问题有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网html频道。

--结束END--

本文标题: c#常见的问题有哪些

本文链接: https://www.lsjlt.com/news/91019.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c#常见的问题有哪些
    今天小编给大家分享一下c#常见的问题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 ...
    99+
    2024-04-02
  • MySQL的常见问题有哪些
    这篇文章主要介绍“MySQL的常见问题有哪些”,在日常操作中,相信很多人在MySQL的常见问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL的常见问题有哪些”...
    99+
    2024-04-02
  • MyCAT的常见问题有哪些
    小编给大家分享一下MyCAT的常见问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 一:连...
    99+
    2024-04-02
  • Tunnel的常见问题有哪些
    这篇文章主要介绍“Tunnel的常见问题有哪些”,在日常操作中,相信很多人在Tunnel的常见问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Tunnel的常见问题有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-02
  • JBuilder常见问题有哪些
    本篇内容主要讲解“JBuilder常见问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JBuilder常见问题有哪些”吧!.怎样在WIN2000下使用JB3.5JBuilder3.5在W...
    99+
    2023-06-03
  • angular常见问题有哪些
    这篇文章主要介绍了angular常见问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。AngularJS可以视为是一种数据优先的框架,...
    99+
    2024-04-02
  • css常见问题有哪些
    小编给大家分享一下css常见问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. CSS 中 inline 元素可以设置...
    99+
    2024-04-02
  • Sonar常见问题有哪些
    本篇内容介绍了“Sonar常见问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Equality tests should not...
    99+
    2023-06-04
  • Hibernate常见问题有哪些
    这篇文章主要介绍“Hibernate常见问题有哪些”,在日常操作中,相信很多人在Hibernate常见问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate常见问题有哪些”的疑惑有所帮助!...
    99+
    2023-06-17
  • Silverlight常见问题有哪些
    这篇文章主要介绍了Silverlight常见问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Silverlight常见问题1)无法打开形如http://localho...
    99+
    2023-06-17
  • Redis常见问题有哪些
    今天就跟大家聊聊有关Redis常见问题有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 1.Redis如何做内存优化...
    99+
    2024-04-02
  • mysql常见问题有哪些
    小编给大家分享一下mysql常见问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. Ca...
    99+
    2024-04-02
  • Java常见问题有哪些
    这篇文章给大家分享的是有关Java常见问题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问: 如何设置Java 2(JDK1.2)的环境变量    答: Java 2安装后,需要设置PATH和JA...
    99+
    2023-06-03
  • Vista常见问题有哪些
    小编给大家分享一下Vista常见问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、以下问题在Windows Vista Enterprise版本中测试通...
    99+
    2023-06-14
  • Linux中有哪些常见的问题
    这篇文章主要介绍了Linux中有哪些常见的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、 文档文档及其不足是今年最大的痛点之一。尽管开源的方式产生了优秀的代码,但是制...
    99+
    2023-06-10
  • JavaScript的Promise常见问题有哪些
    这篇“JavaScript的Promise常见问题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2024-04-02
  • Windows Server的常见问题有哪些
    安装问题:Windows Server安装过程中可能会遇到各种问题,例如无法启动安装程序、安装过程中的错误消息等。 网络问题...
    99+
    2024-02-29
    Windows
  • android studio的常见问题有哪些
    Android Studio的常见问题包括但不限于以下内容:1. 安装问题:如安装过程中出现错误、无法打开Android Studi...
    99+
    2023-08-31
    android
  • SQL Server常见的问题有哪些
    SQL Server常见的问题包括但不限于以下几个方面:1. 性能问题:SQL Server的性能问题可能包括慢查询、高CPU使用率...
    99+
    2023-09-13
    SQL Server
  • Oracle ACE常见问题有哪些
    本篇内容主要讲解“Oracle ACE常见问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle ACE常见问题有哪些”吧!Oracle ACE ...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作