Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 青青国产成人久久激情91麻豆,亚洲高清自拍,韩国三级影院

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          net下功能強(qiáng)大的HTML解析庫HtmlAgilit

          net下功能強(qiáng)大的HTML解析庫HtmlAgilityPack,數(shù)據(jù)抓取必備

          tmlAgilityPack是一個.NET平臺下的HTML解析庫,它可以將HTML文本轉(zhuǎn)換為DOM文檔對象,方便我們對HTML文本進(jìn)行操作和分析。HtmlAgilityPack支持XPath語法,可以通過XPath表達(dá)式來獲取DOM節(jié)點(diǎn),同時還提供了一些方便的API,可以實(shí)現(xiàn)HTML文本的解析、修改、生成等功能。本文將詳細(xì)介紹HtmlAgilityPack的使用及使用方法。

          一、HtmlAgilityPack的安裝

          HtmlAgilityPack是一個NuGet包,可以通過Visual Studio的NuGet包管理器來安裝。具體步驟如下:

          1. 打開Visual Studio,打開要安裝HtmlAgilityPack的項目。
          2. 在“解決方案資源管理器”中右鍵單擊項目,選擇“管理NuGet程序包”。
          3. 在“NuGet程序包管理器”中搜索“HtmlAgilityPack”,選擇“安裝”。
          4. 等待安裝完成。

          安裝完成后,就可以在項目中使用HtmlAgilityPack了。

          二、HtmlAgilityPack的使用

          1. 加載HTML文本

          使用HtmlAgilityPack解析HTML文本的第一步是將HTML文本加載到一個HtmlDocument對象中。可以通過以下代碼來實(shí)現(xiàn):

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);

          其中,htmlText是要解析的HTML文本。LoadHtml方法會將HTML文本解析成一個DOM文檔對象,并存儲在doc對象中。

          1. 獲取DOM節(jié)點(diǎn)

          HtmlAgilityPack提供了一些方法來獲取DOM節(jié)點(diǎn),例如GetElementById、GetElementsByTagName、SelectSingleNode、SelectNodes等。這些方法都接受一個XPath表達(dá)式作為參數(shù),用來指定要獲取的節(jié)點(diǎn)。以下是一些示例代碼:

          // 獲取id為"content"的節(jié)點(diǎn)
          HtmlNode contentNode=doc.GetElementById("content");
          
          // 獲取所有的a標(biāo)簽
          HtmlNodeCollection aNodes=doc.DocumentNode.SelectNodes("//a");
          
          // 獲取第一個p標(biāo)簽
          HtmlNode pNode=doc.DocumentNode.SelectSingleNode("//p");

          其中,XPath表達(dá)式的語法與XML的XPath語法相同。在這里不再詳細(xì)介紹。

          1. 修改DOM節(jié)點(diǎn)

          HtmlAgilityPack提供了一些方法來修改DOM節(jié)點(diǎn),例如SetAttributeValue、InnerHtml、OuterHtml等。以下是一些示例代碼:

          // 修改id為"content"的節(jié)點(diǎn)的class屬性
          contentNode.SetAttributeValue("class", "new-class");
          
          // 修改第一個p標(biāo)簽的內(nèi)容
          pNode.InnerHtml="這是新的內(nèi)容";
          
          // 修改第一個a標(biāo)簽的href屬性
          HtmlNode aNode=aNodes[0];
          aNode.SetAttributeValue("href", "http://www.example.com");
          1. 生成HTML文本

          HtmlAgilityPack還可以將DOM文檔對象轉(zhuǎn)換為HTML文本。可以通過以下代碼來實(shí)現(xiàn):

          string newHtmlText=doc.DocumentNode.OuterHtml;

          其中,OuterHtml屬性返回DOM文檔對象的HTML文本表示。

          三、HtmlAgilityPack的功能實(shí)例

          下面將通過一些具體的實(shí)例來演示HtmlAgilityPack的使用方法。

          1. 獲取頁面標(biāo)題

          以下代碼演示了如何獲取頁面標(biāo)題:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNode titleNode=doc.DocumentNode.SelectSingleNode("//title");
          string title=titleNode.InnerHtml;

          其中,htmlText是要解析的HTML文本。首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達(dá)式“//title”獲取頁面標(biāo)題節(jié)點(diǎn)。最后,通過InnerHtml屬性獲取標(biāo)題的內(nèi)容。

          1. 獲取頁面中的所有圖片

          以下代碼演示了如何獲取頁面中的所有圖片:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNodeCollection imgNodes=doc.DocumentNode.SelectNodes("//img");
          foreach (HtmlNode imgNode in imgNodes)
          {
              string src=imgNode.GetAttributeValue("src", "");
              Console.WriteLine(src);
          }

          首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達(dá)式“//img”獲取所有圖片節(jié)點(diǎn)。最后,遍歷所有圖片節(jié)點(diǎn),獲取每個節(jié)點(diǎn)的src屬性。

          1. 獲取頁面中的所有鏈接

          以下代碼演示了如何獲取頁面中的所有鏈接:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNodeCollection aNodes=doc.DocumentNode.SelectNodes("//a");
          foreach (HtmlNode aNode in aNodes)
          {
              string href=aNode.GetAttributeValue("href", "");
              Console.WriteLine(href);
          }

          首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達(dá)式“//a”獲取所有鏈接節(jié)點(diǎn)。最后,遍歷所有鏈接節(jié)點(diǎn),獲取每個節(jié)點(diǎn)的href屬性。

          1. 修改頁面中的所有鏈接

          以下代碼演示了如何將頁面中的所有鏈接修改為指定的鏈接:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNodeCollection aNodes=doc.DocumentNode.SelectNodes("//a");
          foreach (HtmlNode aNode in aNodes)
          {
              aNode.SetAttributeValue("href", "http://www.example.com");
          }
          
          string newHtmlText=doc.DocumentNode.OuterHtml;

          首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達(dá)式“//a”獲取所有鏈接節(jié)點(diǎn)。最后,遍歷所有鏈接節(jié)點(diǎn),將它們的href屬性修改為指定的鏈接。最后,通過OuterHtml屬性將修改后的DOM文檔對象轉(zhuǎn)換為HTML文本。

          本文介紹了HtmlAgilityPack的使用及使用方法。HtmlAgilityPack是一個功能強(qiáng)大、易用性高的HTML解析庫,可以方便地對HTML文本進(jìn)行操作和分析。通過本文的介紹,讀者可以了解HtmlAgilityPack的基本用法,并可以根據(jù)需要自行擴(kuò)展。

          個問題是我們作為程序員幾乎每天都要進(jìn)行的操作,那它有多少種方式呢,我們這里就這點(diǎn)來說一說。

          解析的四種方式

          • 官方解析
          • 谷歌 Gson 解析
          • 阿里巴巴 FastJson 解析
          • Jackson 解析

          案例實(shí)操

          這里我們就只討論對象與 json 如何互相轉(zhuǎn)換。

          這里我們先創(chuàng)建好 Maven 項目,方便引入依賴,通過單元測試來實(shí)際檢驗(yàn)我們不同的解析方式。

          下面我們都使用 User 對象,先創(chuàng)建好我們需要的類。

          User.java

          package org.example;
          
          public class User {
          
              private String name;
              private String sex;
              private Integer age;
          
              public User() {
              }
          
              public User(String name, String sex, Integer age) {
                  this.name=name;
                  this.sex=sex;
                  this.age=age;
              }
          
              public String getName() {
                  return name;
              }
          
              public void setName(String name) {
                  this.name=name;
              }
          
              public String getSex() {
                  return sex;
              }
          
              public void setSex(String sex) {
                  this.sex=sex;
              }
          
              public Integer getAge() {
                  return age;
              }
          
              public void setAge(Integer age) {
                  this.age=age;
              }
          
              @Override
              public String toString() {
                  return "User{" +
                          "name='" + name + '\'' +
                          ", sex='" + sex + '\'' +
                          ", age=" + age +
                          '}';
              }
              
          }
          
          12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

          官方解析

          官方提供的 json 解析方式,比較繁瑣,所以用的人比較少。

          第一步,引入依賴:

          <!--json官方-->
          <dependency>
              <groupId>org.json</groupId>
              <artifactId>json</artifactId>
              <version>20160810</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import org.json.JSONObject;
          import org.springframework.stereotype.Component;
          
          /**
           * 官方解析
           */
          @Component
          public class JsonTest1 {
          
              /**
               * 對象轉(zhuǎn)json
               * @param user
               * @return
               */
              public String userToJson(User user){
                  JSONObject jsonObject=new JSONObject(user);
                  String jsonStr=jsonObject.toString();
                  return jsonStr;
              }
          
              /**
               * json轉(zhuǎn)對象
               * @param json
               * @return
               */
              public User userFromJson(String json){
                  JSONObject jsonObject=new JSONObject(json);
                  String name=jsonObject.getString("name");
                  String sex=jsonObject.getString("sex");
                  int age=jsonObject.getInt("age");
                  User user=new User(name,sex,age);
                  return user;
              }
          
          }
          12345678910111213141516171819202122232425262728293031323334353637

          第三步,單元測試:

          package org.example;
          
          import org.junit.Test;
          import org.junit.runner.RunWith;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.test.context.ContextConfiguration;
          import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
          
          @RunWith(SpringJUnit4ClassRunner.class)
          @ContextConfiguration(locations="classpath:spring.xml")
          public class JsonTest1Test {
          
              @Autowired
              private JsonTest1 jsonTest1;
          
              @Test
              public void userToJson() {
                  User user=new User("秦明", "man", 18);
                  String json=jsonTest1.userToJson(user);
                  System.out.println(json);
              }
          
              @Test
              public void userFromJson() {
                  String json="{\"sex\":\"man\",\"name\":\"秦明\",\"age\":18}";
                  User user=jsonTest1.userFromJson(json);
                  System.out.println(user);
              }
          }
          1234567891011121314151617181920212223242526272829

          第四步,查看結(jié)果:

          [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-NMZ83TVw-1598863238953)(https://imgkr.cn-bj.ufileos.com/76db02f6-dd02-4e23-a6dd-8ce988bc5c62.png)]

          [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-YJyh0WBY-1598863238960)(https://imgkr.cn-bj.ufileos.com/847c4325-a895-4c13-b3d9-4f12e4876720.png)]

          谷歌 Gson 解析

          第一步,引入依賴:

          <!--gson-->
          <dependency>
              <groupId>com.google.code.gson</groupId>
              <artifactId>gson</artifactId>
              <version>2.8.5</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import com.google.gson.Gson;
          import org.springframework.stereotype.Component;
          
          /**
           * gson解析
           */
          @Component
          public class JsonTest2 {
          
              /**
               * 對象轉(zhuǎn)json
               * @param user
               * @return
               */
              public String userToJson(User user){
                  Gson gson=new Gson();
                  String json=gson.toJson(user);
                  return json;
              }
          
              /**
               * json轉(zhuǎn)對象
               * @param json
               * @return
               */
              public User userFromJson(String json){
                  Gson gson=new Gson();
                  User user=gson.fromJson(json, User.class);
                  return user;
              }
          
          }
          12345678910111213141516171819202122232425262728293031323334

          第三步,單元測試:同上(下面第三步和第四步和上面都一樣,所以下面省略)

          第四步,查看結(jié)果:同上

          阿里巴巴 FastJson 解析

          這個解析方式是由阿里巴巴開發(fā)出來的,效率最高,深受大家喜愛,功能強(qiáng)大,想要更深入學(xué)習(xí)的可以查看 FastJson 官網(wǎng)API。

          第一步,引入依賴:

          <!--fastjson-->
          <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>fastjson</artifactId>
              <version>1.2.47</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import com.alibaba.fastjson.JSONObject;
          import org.springframework.stereotype.Component;
          
          /**
           * fastjson解析
           */
          @Component
          public class JsonTest3 {
          
              /**
               * 對象轉(zhuǎn)json
               * @param user
               * @return
               */
              public String userToJson(User user){
                  String json=JSONObject.toJSONString(user);
                  return json;
              }
          
              /**
               * json轉(zhuǎn)對象
               * @param json
               * @return
               */
              public User userFromJson(String json){
                  User user=JSONObject.parseObject(json,User.class);
                  return user;
              }
          
          }
          1234567891011121314151617181920212223242526272829303132

          Jackson 解析

          這個解析方式是在目前我們使用最流行的一些框架比如 SSM、SpringBoot,其內(nèi)部的 json 解析使用的就是 Jackson,但往往我們會另外引入 FastJson 來使用,因?yàn)樗俣雀臁?/p>

          第一步,引入依賴:

          <!--jackson-->
          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
              <version>2.9.8</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import com.fasterxml.jackson.core.JsonProcessingException;
          import com.fasterxml.jackson.databind.ObjectMapper;
          import org.springframework.stereotype.Component;
          
          import java.io.IOException;
          
          /**
           * jackson解析
           */
          @Component
          public class JsonTest4 {
          
              /**
               * 對象轉(zhuǎn)json
               * @param user
               * @return
               */
              public String userToJson(User user) throws JsonProcessingException {
                  ObjectMapper objectMapper=new ObjectMapper();
                  String json=objectMapper.writeValueAsString(user);
                  return json;
              }
          
              /**
               * json轉(zhuǎn)對象
               * @param json
               * @return
               */
              public User userFromJson(String json) throws IOException {
                  ObjectMapper objectMapper=new ObjectMapper();
                  User user=objectMapper.readValue(json, User.class);
                  return user;
              }
          
          }
          12345678910111213141516171819202122232425262728293031323334353637

          擴(kuò)展~JSON的誕生

          JSON 的誕生是因?yàn)?XML 整合到 HTML 中各個瀏覽器實(shí)現(xiàn)的細(xì)節(jié)不盡相同,所以道格拉斯·克羅克福特(Douglas Crockford)和 奇普·莫寧斯達(dá)(Chip Morningstar)一起從 JS 的數(shù)據(jù)類型中提取了一個子集,作為新的數(shù)據(jù)交換格式,因?yàn)橹髁鞯臑g覽器使用了通用的 JavaScript 引擎組件,所以在解析這種新數(shù)據(jù)格式時就不存在兼容性問題,于是他們將這種數(shù)據(jù)格式命名為 “JavaScript Object Notation”,縮寫為 JSON,由此 JSON 便誕生了!

          著崗位競爭的越來越激烈,而設(shè)計師掌握的技能要求也越多,設(shè)計師不光只會設(shè)計,而且也要懂(會)代碼(會手寫代碼更會加金的),所以我們要做一位懂代碼設(shè)計師,還好Jason在大學(xué)學(xué)過代碼,畢業(yè)也做過一段時間的設(shè)計+前端,我將我在代碼方面的知識總結(jié)分享給大家,趕緊往下看吧

          基礎(chǔ)認(rèn)識

          html語句是由標(biāo)簽+屬性構(gòu)成的

          html 標(biāo)簽由開始標(biāo)簽和結(jié)束標(biāo)簽組成,開始標(biāo)簽是被括號包圍的元素名,結(jié)束標(biāo)簽是被括號包圍的斜杠和元素名,但某些 html 元素沒有結(jié)束標(biāo)簽,比如 <br />、<img>,這類標(biāo)簽稱為單標(biāo)簽。


          屬性的語法

          1、寫在標(biāo)簽的<>內(nèi),而且在標(biāo)簽代碼之后,如<p *></p>

          2、屬性名=""(一定得是英文的引號,不能是中文的引號。其實(shí)不用引號對于它的顯示沒有影響,但加上引號為標(biāo)準(zhǔn)做法)

          如 align="center" align為屬性名 center left right是屬性值

          3、有的標(biāo)簽沒有任何屬性(<br>),有的標(biāo)簽雖然有屬性,但可以不加上也不影響它的使用(<p></p>),但有的標(biāo)簽則是必須與屬性連用方能正常顯示(<a></a>)


          網(wǎng)頁的基本結(jié)構(gòu)

          <html>

          <head></head>

          <body></body>

          </html>

          html,head,body 是html代碼必不可少的三大標(biāo)簽,其中

          html標(biāo)簽:用于定義html文件的標(biāo)簽,這個標(biāo)簽意味著這個文件是一個html文件

          head標(biāo)簽:里面的內(nèi)容不能再瀏覽器中直接呈現(xiàn),但它會用后臺運(yùn)作的方式為html頁面提供種種功能

          body標(biāo)簽:里面出現(xiàn)的內(nèi)容會在瀏覽器中得到直接呈現(xiàn),供讀者瀏覽

          必須要記住的標(biāo)簽和屬性

          放在<head></head>之間的

          <title> </title>

          <title> </title>標(biāo)簽定義html文檔的標(biāo)題。<title>與</title>之間的內(nèi)容將顯示在瀏覽器窗口的標(biāo)題欄。


          <meta>標(biāo)簽

          <meta>標(biāo)簽類可以插入很多很有用的元素屬性。常用的有以下四種:

          <meta name="keywords" content="study,computer">

          用來標(biāo)記搜索引擎在搜索你的頁面時所取出的關(guān)鍵詞。

          <meta name="author" content=“wutao">

          用來標(biāo)記文檔的作者。

          <meta http-equiv=“content-type” content=“text/html; charset=gb2312”>

          用來標(biāo)記你的頁面的解碼方式。

          <meta http-equiv=“refresh” content=“5;url=http://www.xnc.edu.cn”>

          用來自動刷新網(wǎng)頁




          放在<body></body>之間的

          與文字相關(guān)的標(biāo)簽

          文字標(biāo)題

          <h#> ... </h#>

          #=1, 2, 3, 4, 5, 6

          段(paragraph) <p>

          空白占位符

          換行<br>

          文字的分區(qū)顯示

          <div align=#> ... </div> (#=left, center, right)

          <i> 顯示斜體文本效果。

          <b> 呈現(xiàn)粗體文本效果。

          <big> 呈現(xiàn)大號字體效果。

          <small> 呈現(xiàn)小號字體效果。


          無序列表

          無序列表是由<ul>和<li>元素定義的:

          <ul>

          <li>sports</li>

          <li> food </li>

          <li> drink </li>

          <li> friends </li>

          </ul>

          <ul>和<li>中均可加入type屬性,type的屬性值有:disc(圓)、circle(圓圈)、square(方塊)

          有序列表 start 值為數(shù)字

          有序列表由<ol>和<li>定義:

          <ol>

          <li>sports</li>

          <li> drink</li>

          <li> friends</li>

          </ol>

          ....................................................................

          我的微信公眾號:UI嚴(yán)選 —越努力,越幸運(yùn)


          主站蜘蛛池模板: 国产伦精品一区二区三区免费下载| 日本一区二区三区在线看| 中文字幕无码一区二区三区本日| 精品一区二区三区免费毛片爱| 国产一区二区三区无码免费| 亚洲一区二区三区在线播放| 日韩色视频一区二区三区亚洲| 精品欧洲av无码一区二区14| 国产精品视频一区二区噜噜| 国产人妖在线观看一区二区| 春暖花开亚洲性无区一区二区 | 亚洲天堂一区二区三区| 免费一区二区无码东京热| 全国精品一区二区在线观看| 国产成人无码一区二区三区| 国产一区二区三区不卡在线看| 无码中文字幕一区二区三区| 精品香蕉一区二区三区| 久久久国产精品亚洲一区 | 国产一区二区三区不卡AV| 日韩成人一区ftp在线播放| 日韩毛片基地一区二区三区| 精品国产乱子伦一区二区三区 | 亚洲一区二区三区国产精华液| 精品亚洲AV无码一区二区| 亚洲AV无码一区二区三区性色| 国产日韩精品视频一区二区三区 | 激情内射亚州一区二区三区爱妻| 精品国产日韩亚洲一区| 国产高清在线精品一区二区| 久久无码精品一区二区三区| 国产在线无码一区二区三区视频| 日韩人妻一区二区三区蜜桃视频| 在线中文字幕一区| 国产精品成人免费一区二区| 高清无码一区二区在线观看吞精| 制服中文字幕一区二区| 无码国产精品一区二区免费式直播| 在线观看视频一区二区| 一区二区三区免费在线观看| 亚洲国产成人一区二区精品区|