整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          第53期Java面試題:XML和HTML的區別、XM

          第53期Java面試題:XML和HTML的區別、XML文檔定義、java反射機制

          、XML和HTML的區別?

          1)設計上的區別:XML用來存儲數據,重點在于數據本身,HTML用來定義數據,重在數據的顯示模式。

          2)XML可擴展性強,因為他本身就是可拓展性標記語言,課創建個性化的標記語言,提供更多數據操作。

          3)XML語法比HTML嚴格。

          4)起始標簽和結束標簽要匹配

          5)嵌套標簽不能相互嵌套

          6)區分大小寫

          7)XML屬性必須放在引號中,HTML可有可無。

          8)XML必須有相應值,但HTML可以有不帶屬性的屬性名。

          2、XML文檔定義有幾種形式?它們之間有何本質區別?

          1)兩種形式 dtd schema。

          2)本質區別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的),

          3、什么是java反射機制?

          JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

          入dll

          1.通過NuGet安裝dll(2種方法)

          1.1可以在Visual Studio中打開“解決方案資源管理器”,鼠標右鍵點擊“引用”,“管理NuGet包”,然后搜索“Free Spire.Doc”,點擊“安裝”。等待程序安裝完成。

          1.2將以下內容復制到PM控制臺安裝:

          Install-Package FreeSpire.Doc -Version 10.2

          2.手動添加dll引用

          可通過手動下載包到本地,然后解壓,找到BIN文件夾下的Spire.Doc.dll。然后在Visual Studio中打開“解決方案資源管理器”,鼠標右鍵點擊“引用”,“添加引用”,將本地路徑BIN文件夾下的dll文件添加引用至程序。


          將HTML轉為XML

          轉換時,可參考如下代碼來進行:

          1. 創建Document類的對象。
          2. 調用Document.LoadFromFile(string fileName, FileFormat fileFormat)方法加載HTML文檔。
          3. 通過Document.SaveToFile(string fileName, FileFormat fileFormat)方法保存為XML格式到指定路徑。

          C#

          using Spire.Doc;
          
          namespace HTMLtoXML
          {
              class Program
              {
                  static void Main(string[] args)
                  {
                      //創建Document類的對象
                      Document doc=new Document();
          
                      //加載html文件
                      doc.LoadFromFile("sample.html",FileFormat.Html);
          
                      //保存為XML格式
                      doc.SaveToFile("HTMLtoXML.xml", FileFormat.Xml);
                      System.Diagnostics.Process.Start("HTMLtoXML.xml");
                  }
              }
          }

          轉換效果:

          —End—

          、安裝

          XPath (XML Path Language) 是一門在 HTML\XML 文檔中查找信息的語言,可用來在 HTML\XML 文檔中對元素和屬性進行遍歷。

          pip install lxml

          二、使用案例

          from lxml import etree
          import requests
          import asyncio
          import functools
          import re
          import json
          
          house_info=[]
          
          '''異步請求獲取鏈家每頁數據'''
          async def get_page(page_index):
              headers={
                  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
              }
              request=functools.partial(requests.get, f'https://sh.lianjia.com/ershoufang/pudong/pg{page_index}/',
                                          headers=headers)
              loop=asyncio.get_running_loop()
              response=await loop.run_in_executor(None, request)
              return response
          
          '''使用xpath獲取房屋信息'''
          def get_house_info(html):
              title_list=html.xpath('//a[@data-el="ershoufang"]/text()')  # 房屋title
              house_pattern_list=html.xpath('//div[@class="houseInfo"]/text()')  # 房屋格局
              price_list=html.xpath('//div[@class="unitPrice"]/span/text()')  # 房屋單價
              location_list=html.xpath('//div[@class="positionInfo"]')  # 房屋位置信息
              total_list=html.xpath('//div[contains(@class,"totalPrice")]')  # 總價
          
              for index, item in enumerate(zip(title_list, house_pattern_list, price_list)):
                  location_item=location_list[index]
                  total_item=total_list[index]
                  house_info.append({
                      'title': item[0],
                      'house_pattern': item[1],
                      'price': item[2],
                      'location': location_item.xpath('./a[1]/text()')[0] + location_item.xpath('./a[last()]/text()')[0],
                      'total': total_item.xpath('./span/text()')[0] + total_item.xpath('./i[last()]/text()')[0]
                  })
          
          '''異步獲取第一頁數據,拿到第一頁房屋信息,并返回分頁總數和當前頁'''
          async def get_first_page():
              response=await get_page(1)
              #etree.HTML 將獲取到的html字符串轉為可操作的Element對象
              get_house_info(etree.HTML(response.text))
          
          if __name__=='__main__':
              asyncio.run(get_first_page())
          

          三、etree 模塊

          1. etree.Element(element_name, attrib=None, nsmap=None) 創建element對象
          from lxml import etree
          '''
          element_name:要創建的元素的名稱
          attrib:元素的屬性字典
          nsmap:命名空間映射字典,用于指定元素的命名空間
          '''
          element=etree.Element('div',attrib={'class':'test'},nsmap={"ns": "http://example.com/ns"})
          1. etree.SubElement(parent, element_name, attrib=None, nsmap=None) 創建子元素
          from lxml import etree
          '''
          parent:element對象
          element_name:要創建的元素的名稱
          attrib:元素的屬性字典
          nsmap:命名空間映射字典,用于指定元素的命名空間
          '''
          element=etree.Element('div', attrib={'class': 'test'}, nsmap={"ns": "http://example.com/ns"})
          span_element=etree.SubElement(element,'span')
          span_element.text='我是span'
          print(element.xpath('//div/span/text()'))
          1. etree.fromstring(text, parser=None,base_url=None) 將XML、HTML字符串解析為Element對象
          from lxml import etree
          
          '''
          text:解析的XML字符串
          parse:解析器對象,默認lxml.etree.XMLParser、lxml.etree.HTMLParser
          base_url: 基本URL,用于解析相對URL。如果HTML文檔中包含相對URL,解析器將使用base_url來將其轉換為絕對URL。如果未提供base_url,則相對URL將保持不變
          '''
          html_str='<div class="test"><span>我是span</span></div>'
          element=etree.fromstring(html_str)
          print(element.xpath('//div/span/text()'))
          1. etree.HTML(text, parser=None, base_url=None) 將HTML字符串解析為Element對象
          from lxml import etree
          
          '''
          xml_string:解析的XML字符串
          parse:解析器對象,默認lxml.etree.HTMLParser
          base_url: 基本URL,用于解析相對URL。如果HTML文檔中包含相對URL,解析器將使用base_url來將其轉換為絕對URL。如果未提供base_url,則相對URL將保持不變
          '''
          html_str='<div class="test"><span>我是span</span></div>'
          element=etree.HTML(html_str)
          print(element.xpath('//div/span/text()'))
          1. etree.XML(text, parser=None, base_url=None) 將XML字符串解析為Element對象
          from lxml import etree
          
          '''
          text:解析的XML字符串
          parse:解析器對象,默認lxml.etree.XMLParser
          base_url: 基本URL,用于解析相對URL。如果HTML文檔中包含相對URL,解析器將使用base_url來將其轉換為絕對URL。如果未提供base_url,則相對URL將保持不變
          '''
          html_str='<div class="test"><span>我是span</span></div>'
          element=etree.XML(html_str)
          print(element.xpath('//div/span/text()'))
          1. etree.parse(source, parser=None, base_url=None) 將XML、HTML字符串解析為ElementTree對象

          四、element 對象

          1. element.xpath(path) 執行xpath語法
          2. element.nsmap:獲取或設置元素命名空間映射
          3. element.attrib:獲取或設置元素屬性
          4. element.text:獲取或設置文本
          5. element.tag:返回對象名稱
          6. element.append(element) 向節點里面追加子節點
          7. element.insert(index,element) 向節點開始的某個位置添加子節點
          from lxml import etree
          
          element=etree.Element('div', attrib={'class': 'test'})
          span_element=etree.SubElement(element, 'span')
          span_element.text='我是span'append_child=etree.Element('div', attrib={'class': 'append'})
          append_child.text='我是append_child'insert_child=etree.Element('div', attrib={'class': 'insert'})
          insert_child.text='我是insert_child'element.append(append_child)
          element.insert(0,insert_child)
          print(element.xpath('//div/span/text()'))
          print(element.xpath('//div/div[@class="append"]/text()'))
          print(element.xpath('//div/div[@class="insert"]/text()'))
          1. element.find(xpath): 在元素的子樹中查找與XPath表達式匹配的第一個元素,并返回該元素。如果找不到匹配的元素,則返回None
          2. element.findall(xpath): 在元素的子樹中查找與XPath表達式匹配的所有元素,并返回一個列表
          3. element.get(attribute_name, default=None): 獲取元素的指定屬性的值
          4. element.set(attribute_name, value): 設置元素的指定屬性的值
          5. element.iter(tag=None): 迭代元素及其子元素,可選擇指定標簽進行過濾
          6. element.getparent(): 獲取元素的父元素
          7. element.getchildren(): 獲取元素的所有子元素
          8. element.getroottree(): 獲取包含元素的根元素的Tree對象

          五、elementTree 對象

          1. elementTree.root: 根元素的Element對象。可以通過訪問tree.root來獲取根元素。
          2. elementTree.getroot(): 獲取根元素的Element對象。與tree.root屬性相同,用于獲取根元素
          3. elementTree.find(path): 在整個文檔中查找具有指定路徑的第一個元素,并返回該元素的Element對象。路徑可以使用XPath表達式指定
          4. elementTree.findall(path): 在整個文檔中查找具有指定路徑的所有元素,并返回這些元素的列表。路徑可以使用XPath表達式指定
          5. elementTree.iterfind(path): 在整個文檔中迭代查找具有指定路徑的元素,并返回這些元素的迭代器。路徑可以使用XPath表達式指定
          6. elementTree.write(file, encoding=None, xml_declaration=None, pretty_print=False): 將整個文檔寫入文件。file參數可以是文件名或文件對象。encoding參數指定寫入文件時使用的字符編碼。xml_declaration參數指定是否寫入XML聲明。pretty_print參數指定是否以更易讀的格式寫入文檔
          7. elementTree.tostring(element, encoding=None, method="xml", pretty_print=False): 將指定元素及其子元素序列化為字符串。element參數是要序列化的元素。encoding參數指定字符串的字符編碼。method參數指定序列化的方法,可以是"xml"(默認)或"html"。pretty_print參數指定是否以更易讀的格式序列化。
          8. elementTree.parse(source, parser=None, base_url=None): 靜態方法,用于解析XML或HTML文檔并返回一個ElementTree對象。與etree.parse函數的用法相同

          六、parse 解析器對象

          1. lxml.etree.XMLParser: 用于解析XML文檔的默認解析器。它支持標準的XML解析,并提供了豐富的功能和選項,如命名空間支持、DTD驗證等。
          2. lxml.etree.HTMLParser: 用于解析HTML文檔的默認解析器。它專門針對HTML進行了優化,并具有處理HTML特性的功能,如自動修復破碎的標簽、處理實體引用等。
          3. lxml.etree.XMLPullParser: 一種事件驅動的解析器,用于逐行解析XML文檔。它提供了一個迭代器接口,可以逐行讀取和處理XML文檔。
          4. lxml.etree.HTMLPullParser: 一種事件驅動的解析器,用于逐行解析HTML文檔。它提供了一個迭代器接口,可以逐行讀取和處理HTML文檔。

          主站蜘蛛池模板: 日韩一区二区三区无码影院 | 亚洲综合一区二区| 国产主播福利一区二区| 国产一区中文字幕在线观看| 蜜臀AV一区二区| 无码一区二区三区老色鬼| 久久久久女教师免费一区| 国产精品一区二区四区| 国产精品久久无码一区二区三区网 | 精品女同一区二区三区在线| 亚洲av色香蕉一区二区三区| 国产婷婷色一区二区三区深爱网 | 亚洲一区二区三区成人网站| 麻豆一区二区免费播放网站| 无码人妻一区二区三区兔费| 精品国产一区二区三区不卡| 国内自拍视频一区二区三区| 精品一区二区ww| 日亚毛片免费乱码不卡一区| 精品人妻一区二区三区毛片| 久久婷婷色综合一区二区| 韩日午夜在线资源一区二区| 中文乱码精品一区二区三区| 亚洲第一区香蕉_国产a| 极品人妻少妇一区二区三区| 无码日韩AV一区二区三区| 黄桃AV无码免费一区二区三区| 无码人妻一区二区三区免费看| 亚洲美女一区二区三区| 日韩精品一区二区三区毛片 | 精品理论片一区二区三区| 亚洲熟女乱综合一区二区| 欧洲无码一区二区三区在线观看 | 日韩在线一区二区三区视频| 无码人妻精品一区二| 色噜噜狠狠一区二区| 黑人大战亚洲人精品一区| 国产精品综合AV一区二区国产馆| 国产一区高清视频| 精品福利一区二区三区免费视频 | 黄桃AV无码免费一区二区三区|