日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【JavaWeb】XML和Jsoup的相关内容

發布時間:2024/7/5 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【JavaWeb】XML和Jsoup的相关内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 概念
    • 2 語法
      • 2.1 基本語法
      • 2.2 組成部分
      • 2.3 約束
        • 2.3.1 使用DTD約束
        • 2.3.2 使用Schema約束
    • 3 解析
      • 3.1 將文檔中的數據讀到內存
      • 3.2 XML常見的解析器
    • 4 Jsoup
      • 4.1 使用Jsoup
      • 4.2 對象的使用
        • 4.2.1 Jsoup對象
        • 4.2.2 Document對象
        • 4.2.3 Element對象
      • 4.3 快捷查詢方式
        • 4.3.1 selector選擇器
        • 4.3.2 XPath

1 概念

Extensible Markup Language 可擴展標記語言

可擴展:標簽都是自定義的

功能:存儲數據

  • 配置文件
  • 在網絡中傳輸

xml和html的區別

  • xml的標簽都是自定義的 html的標簽都是預定義的
  • xml語法嚴格 html語法松散
  • xml是存儲數據的 html是展示數據的

2 語法

2.1 基本語法

  • 后綴名是.xml
  • 第一行必須定義為文檔聲明
  • <?xml version="1.0" encoding="utf-8" ?>
  • xml中有且僅有1個根標簽
  • 屬性值必須使用引號引起來
  • 標簽必須有結束
  • xml標簽區分大小寫

2.2 組成部分

  • 文檔聲明:<?xml 屬性列表 ?>
    屬性列表:version版本號、encoding編碼方式(默認ISO-8859-1)、standalone是否獨立('yes’不依賴其他文件/'no’依賴其他文件)
  • 指令:結合css控制樣式(了解)<?xml-stylesheet type="text/css" href="#.css" ?>
  • 標簽:名稱自定義。數字、標點不能開頭,名稱不能以xml開頭,名稱不能包含空格。
  • 屬性:id屬性唯一
  • 文本:CDATA區,在這個區域的內容會原樣展示< ! [ CDATA [ 展示數據 ] ] >

2.3 約束

約束:規定xml文檔的書寫規則
目標:在xml中引入約束文檔,讀懂約束文檔

分類

  • DTD:一種簡單的約束技術
  • Schema:一種復雜的約束技術

2.3.1 使用DTD約束

將dtd文檔引入xml文檔
-<!DOCTYPE 根標簽名 SYSTEM "dtd文件位置">

<!ELEMENT students (student*) > <!--根標簽是students *表示子標簽student可以出現多次--> <!ELEMENT student (name,age,sex)> <!--student有三個子標簽可以出現1次--> <!ELEMENT name (#PCDATA)> <!--子標簽的數據類型是PCDATA--> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED> <!--student必須有id--> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE students SYSTEM "student.dtd"><students><student number="itcast_0001"><name>tom</name><age>18</age><sex>male</sex></student> </students>

2.3.2 使用Schema約束

可以約束標簽的屬性值
引入約束:首先填寫根標簽,然后引入xsi前綴,引入xsd文件命名空間,給每個xsd約束聲明一個前綴作為標識

3 解析

3.1 將文檔中的數據讀到內存

操作xml文檔將文檔中的數據讀取到內存中

解析XML的方式:服務端一般用DOM 移動端一般用SAX

  • DOM : 將標記語言文檔一次性加載進內存,在內存中形成一棵DOM樹。
    優點:操作方便,可以對文檔進行CRUD的所有操作
    缺點:消耗內存
  • SAX:逐行讀取,基于事件驅動的。讀一行釋放一次。
    優點:不占內存
    缺點:只能讀取,不能增刪改

3.2 XML常見的解析器

  • JAXP:SUN公司提供的解析器,支持DOM和SAX兩種思想
  • DOM4J
  • Jsoup:是一款HTML解析器,通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數據。可以直接解析URL地址和HTML文本內容
  • PULL:安卓OS內置的解析器,使用SAX方式。

4 Jsoup

4.1 使用Jsoup

  • 導入jar包
  • 獲取Document對象
  • 獲取對應的標簽Element對象
  • 獲取數據
  • public static void main(String[] args) throws IOException {//獲取xml的pathString path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();System.out.println(path);/*E:/JavaLearn/project/JavaScript/out/production/JavaScript/student.xml*///解析xml文檔 加載文檔進內存 獲取dom樹Document document = Jsoup.parse(new File(path), "utf-8");//獲取Element元素對象Elements elements = document.getElementsByTag("name");//獲取第一個name的element對象Element element = elements.get(0);String name = element.text();System.out.println(name);}

    4.2 對象的使用

    主要對象

    • Jsoup是一個工具類,可以解析html或xml文檔,返回Document對象
    • Document是文檔對象,代表內存中的DOM樹
    • Elements是元素Element對象的集合,可以當作ArrayList<Element>來使用
    • Element是元素對象,可以獲取元素的屬性和文本等
    • Node是節點對象,是以上對象的父親。

    4.2.1 Jsoup對象

    Jsoup主要方法

    • Jsoup.parse(File in, String charset) 用來解析html和xml文檔返回Document對象,參數是XML或HTML文件
    • Jsoup.parse(String html) 可以解析xml或html格式的字符串,返回DOM對象
    • Jsoup.parse(URL url, int timeoutMills) 通過網絡獲取指定的html或xml文檔對象

    爬蟲解析HTML時常用

    public static void main(String[] args) throws IOException {URL url = new URL("https://www.baidu.com");Document parse = Jsoup.parse(url, 10000);System.out.println(parse);}

    4.2.2 Document對象

    • getElementById(String id)根據id屬性值獲取唯一的element對象
    • getElementsByTag(String name)根據標簽名獲取元素對象的集合
    • getElementsByAttribute(String key)根據屬性名稱獲取元素對象的集合
    • getElementsByAttributeValue(String key, String value)根據對應的屬性名和屬性值獲取元素對象

    4.2.3 Element對象

    獲取子元素對象

    • getElementById(String id)根據id屬性值獲取唯一的element對象
    • getElementsByTag(String name)根據標簽名獲取元素對象的集合
    • getElementsByAttribute(String key)根據屬性名稱獲取元素對象的集合
    • getElementsByAttributeValue(String key, String value)根據對應的屬性名和屬性值獲取元素對象

    獲取屬性值

    • String attr(String key):根據屬性名稱獲取屬性值

    獲取文本內容

    • String text():獲取文本內容
    • String html():獲取標簽體的所有內容 包括子標簽的字符串內容
    public static void main(String[] args) throws IOException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//通過DOM對象獲取name標簽 可以獲取所有的name標簽Elements elements = document.getElementsByTag("name");System.out.println(elements.size());//通過ELement對象獲取name標簽Element student = document.getElementsByTag("student").get(0);//第一個標簽//通過Element對象獲取子標簽對象Elements name = student.getElementsByTag("name");System.out.println(name.size());//獲取student的屬性值String number = student.attr("number");System.out.println(number);//獲取文本內容String text = elements.text();System.out.println(text);//僅獲取文本System.out.println(elements.html());//獲取子標簽和文本}

    4.3 快捷查詢方式

    4.3.1 selector選擇器

    • Elements select(String cssQuery)
    • 語法:參考selector類的文檔
    public static void main(String[] args) throws IOException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//查詢name標簽Elements name = document.select("name");//標簽選擇器System.out.println(name+"\n");//查詢id值為XXX的元素Elements select = document.select("#smalltom");System.out.println(select+"\n");//獲取student標簽并且number屬性值為 001 的age子標簽Elements select1 = document.select("student[number='001']");//1. 獲取student標簽并且number屬性值為 001System.out.println(select1+"\n");//2. 獲取001的student標簽子標簽Elements select2 = document.select("student[number='001'] > age");System.out.println(select2);}

    4.3.2 XPath

    XML路徑語言,用來確定XML文檔中查找信息的語言
    對DOM樹形結構進行操作
    需要導入JsoupXpath的jar包
    查詢w3cshool的參考手冊區使用XPath的語法進行查詢

    public static void main(String[] args) throws IOException, XpathSyntaxErrorException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//根據DOM對象創建JXDocumentJXDocument jxDocument = new JXDocument(document);//查詢所有student標簽List<JXNode> jxNodes = jxDocument.selN("//student");System.out.println(jxNodes+"\n");//查詢所有student標簽下的所有name標簽List<JXNode> jxNodes1 = jxDocument.selN("//student/name");System.out.println(jxNodes1+"\n");//查詢所有student標簽下帶id屬性的name標簽List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");System.out.println(jxNodes2+"\n");//查詢所有student標簽下帶id屬性的name標簽 且屬性值為XXXList<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='XXX']");System.out.println(jxNodes3);}

    總結

    以上是生活随笔為你收集整理的【JavaWeb】XML和Jsoup的相关内容的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。