XML學習及應用

介紹XML語法及應用

  • 1.XML基礎知識
    • 1.1什么是XML語言
    • 1.2 XML 和 HTML 之間的差異
    • 1.3 XML 用途
  • 2.XML語法
    • 2.1基礎語法
    • 2.2XML元素
    • 2.3 XML屬性
    • 2.4XML命名空間
  • 3.XML驗證
    • 3.1xml語法驗證
    • 3.2自定義驗證
      • 3.2.1 XML DTD
      • 3.2.2 XML Schema
      • 3.2.3PCDATA和CDATA區別
      • 3.2.4 參考

1.XML基礎知識

1.1什么是XML語言

XML 被設計用來傳輸和存儲數據。
HTML 被設計用來顯示數據。
XML 指可擴展標記語言(eXtensible Markup Language)。
可擴展標記語言(英語:Extensible Markup Language,簡稱:XML)是一種標記語言,是從標準通用標記語言(SGML)中簡化修改出來的。它主要用到的有可擴展標記語言、可擴展樣式語言(XSL)、XBRL和XPath等。

1.2 XML 和 HTML 之間的差異

XML 不是 HTML 的替代。
XML 和 HTML 為不同的目的而設計:
XML 被設計用來傳輸和存儲數據,其焦點是數據的內容。
HTML 被設計用來顯示數據,其焦點是數據的外觀。
HTML 旨在顯示信息,而 XML 旨在傳輸信息。

1.3 XML 用途

XML 應用于 Web 開發的許多方面,常用于簡化數據的存儲和共享。

  • XML 把數據從 HTML 分離
    如果您需要在 HTML 文檔中顯示動態數據,那么每當數據改變時將花費大量的時間來編輯 HTML。
    通過 XML,數據能夠存儲在獨立的 XML 文件中。這樣您就可以專注于使用 HTML/CSS 進行顯示和布局,并確保修改底層數據不再需要對 HTML 進行任何的改變。通過使用幾行 JavaScript 代碼,您就可以讀取一個外部 XML 文件,并更新您的網頁的數據內容。
  • XML 簡化數據共享
    在真實的世界中,計算機系統和數據使用不兼容的格式來存儲數據。
    XML 數據以純文本格式進行存儲,因此提供了一種獨立于軟件和硬件的數據存儲方法。
    這讓創建不同應用程序可以共享的數據變得更加容易。
  • XML 簡化數據傳輸
    對開發人員來說,其中一項最費時的挑戰一直是在互聯網上的不兼容系統之間交換數據。
    由于可以通過各種不兼容的應用程序來讀取數據,以 XML 交換數據降低了這種復雜性。

2.XML語法

2.1基礎語法

1.XML 聲明文件的可選部分,如果存在需要放在文檔的第一行,備注版本和語言【可選】

<?xml version="1.0" encoding="utf-8"?>

2.XML必須有個并且只有一個根元素,把所有都包圍起來

<person>
..........
</person>

3.XML是一個樹狀結構,支持層層嵌套

<?xml version="1.0" encoding="utf-8"?>
<bookstore><book category="COOKING"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="CHILDREN"><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book><book category="WEB"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book>
</bookstore>

在這里插入圖片描述

4.XML的一個標簽必須有對應的關閉開關
5.XML的元素屬性必須加引號

錯誤:<tang>ddddd    正確:<tang>ddd</tang>
錯誤:<tag date=200-12-01>fff</tag>  正確:<tag date="2002-12-01">fff</tag>

6.特殊字符轉義
在 XML 中,只有字符 “<” 和 “&” 確實是非法的。大于號是合法的,但是用實體引用來代替它是一個好習慣。

轉義符號:
&lt;	<	小于
&gt;	>	大于
&amp;	&	&符號
&apos;	'	單引號
&quot;	"	雙引號
<!-- 錯誤:-->
<sql> select * from test where id<2</sql>
正確
<sql> select * from test where id &lt; 2</sql>

如果不想使用轉義,則可以加如下格式忽略:< ! [ CDATA [忽略檢查的文本]]>

<sql> select * from test where id  <![ CDATA  <2 ]]></sql>

7.XML注釋

<!-- This is a comment -->

2.2XML元素

XML 元素指的是從(且包括)開始標簽直到(且包括)結束標簽的部分。

一個元素可以包含:

  • 其他元素
  • 文本
  • 屬性
  • 或混合以上所有…
<bookstore><book category="CHILDREN"><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book><book category="WEB"><title>Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book>
</bookstore>
在上面的實例中,<bookstore><book> 都有 元素內容,
因為他們包含其他元素。<book> 元素也有屬性(category="CHILDREN")。
<title><author><year><price> 有文本內容
,因為他們包含文本。

XML 元素必須遵循以下命名規則:

名稱可以包含字母、數字以及其他的字符
名稱不能以數字或者標點符號開始
名稱不能以字母 xml(或者 XML、Xml 等等)開始
名稱不能包含空格
可使用任何名稱,沒有保留的字詞。

2.3 XML屬性

屬性通常提供不屬于數據組成部分的信息。在下面的實例中,文件類型與數據無關,但是對需要處理這個元素的軟件來說卻很重要:

<file type="gif">computer.gif</file>

因使用屬性而引起的一些問題:

  • 屬性不能包含多個值(元素可以)
  • 屬性不能包含樹結構(元素可以)
  • 屬性不容易擴展(為未來的變化)

2.4XML命名空間

XML 命名空間提供避免元素命名沖突的方法,我們看一個例子
a.xml

<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>

b.xml

<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

假如這兩個 XML 文檔被一起使用,由于兩個文檔都包含帶有不同內容和定義的

元素,就會發生命名沖突。XML 解析器無法確定如何處理這類沖突。

XML解決方案:
在 XML 中的命名沖突可以通過使用名稱前綴從而容易地避免。
該 XML 攜帶某個 HTML 表格和某件家具的信息:

<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table><f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

這個前綴,就用命名空間來展示
當命名空間被定義在元素的開始標簽中時,所有帶有相同前綴的子元素都會與同一個命名空間相關聯。命名空間,可以在他們被使用的元素中或者在 XML 根元素中聲明:

語法:
xmlns:前綴名=“…”

<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3cschool.cc/furniture"><h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table><f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table></root>

默認命名空間
我們取消掉 :前綴,就變成默認的命名空間,默認命名空間,在xml里面就不用使用 前綴: 來標注元素了
語法:xmlns=“namespaceURI”

<root xmlns="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3cschool.cc/furniture"><table>
<tr>
<td>Apples</h:td>
<td>Bananas</h:td>
</tr>
</table><f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table></root>

在實戰中,如果一個xml里有多個命名空間,我們一半把使用得最多得那個,作為默認命名空間

3.XML驗證

3.1xml語法驗證

如果XML語法錯誤,解析器會自動驗證

  • XML 文檔必須有一個根元素
  • XML元素都必須有一個關閉標簽
  • XML 標簽對大小寫敏感
  • XML 元素必須被正確的嵌套
  • XML 屬性值必須加引號

3.2自定義驗證

就是希望寫一個xml需要遵循哪些要求,如有多少元素,元素的結構怎么樣,元素屬性和數據類型是哪些,這里要用到XML自定義驗證,XML提供 DTD和Schema兩種語法機制

3.2.1 XML DTD

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>

Note.dtd

<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)> <!--有哪些元素-->
<!ELEMENT to (#PCDATA)>  <!--to 元素內容是可解析的內容-->
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

3.2.2 XML Schema

W3C 支持一種基于 XML 的 DTD 代替者,它名為 XML Schema,Schema比DTD更有擴展性

note.xsd文件:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified"><xs:element name="note"><xs:complexType><!--note是一個復合類型,還有子元素--><xs:sequence> <!--元素必須按照順序出現--><xs:element name="to" type="xs:string"/> <!--子元素名,和數據類型--><xs:element name="from" type="xs:string"/><xs:element name="heading" type="xs:string"/><xs:element name="body" type="xs:string"/></xs:sequence></xs:complexType>
</xs:element></xs:schema>

xml里面引用

<?xml version="1.0"?><note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd"><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body>
</note>

上述只簡單介紹了dtd和schema,了解其基本意思,更多語法可查看schema相關的學習資源,在schema的基礎擴展出WSDL語言,描述XML接口,是SOA技術的基礎

3.2.3PCDATA和CDATA區別

XML 文檔中的所有文本均會被解析器解析。只有 CDATA 區段中的文本會被解析器忽略。
默認情況被解析器解析的文本就是PCDATA

術語 CDATA 是不應該由 XML 解析器解析的文本數據。像 “<” 和 “&” 字符在 XML 元素中都是非法的。
“<” 會產生錯誤,因為解析器會把該字符解釋為新元素的開始。
“&” 會產生錯誤,因為解析器會把該字符解釋為字符實體的開始。
某些文本,比如 JavaScript sql代碼,包含大量 “<” 或 “&” 字符。為了避免錯誤,可以將腳本代碼定義為 CDATA。CDATA 部分中的所有內容都會被解析器忽略。
CDATA 部分由 “<![CDATA[" 開始,由 "]]>” 結束:

eg:

<name><first>Bill</first><last>Gates</last></name>

里面內容是要被解析的,最終效果如下:

<name>
<first>Bill</first>
<last>Gates</last>
</name>

eg:

< script>里面的<我們不希望被解析,則可使用 “<![CDATA[" 開始,由 "]]>” 包圍起來

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>

3.2.4 參考

spring的配置

<?xml version="1.0" encoding="UTF-8"?><beans <!-- 默認命名空間 -->xmlns="http://www.springframework.org/schema/beans"  <!--帶后綴的空間-->xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"<!--schema引用-->xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"default-lazy-init="true">

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213142.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213142.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213142.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AWR1642 boost開發板支持的TI參考設計

打開radar_toolbox_1_30_00_05\source\ti\examples\examples_overview,通過輸入“1642”查找AWR1642 BOOST支持的參考設計,通過篩選,支持AWR1642 BOOST的參考設計如下: 挑選出兩個參考設計上手,一個是“nonos_oob_16xx",不帶OS;另一個是”short range radar“,比較…

Sbatch, Salloc提交任務相關

salloc 申請計算節點&#xff0c;然后登錄到申請到的計算節點上運行指令&#xff1b; salloc的參數與sbatch相同&#xff0c;該部分先介紹一個簡單的使用案例&#xff1b;隨后介紹一個GPU的使用案例&#xff1b;最后介紹一個跨節點使用案例&#xff1b; 首先是一個簡單的例子&a…

基于Java健身房課程管理系統

基于Java健身房課程管理系統 功能需求 1、課程信息管理&#xff1a;系統需要能夠記錄和管理所有課程的詳細信息&#xff0c;包括課程名稱、教練信息、課程時間、課程地點、課程容量等。管理員和教練可以添加、編輯和刪除課程信息。 2、會員信息管理&#xff1a;系統需要能夠…

無服務器監控工具的演變:提高效率和性能

無服務器計算的興起改變了應用程序的構建和部署方式&#xff0c;提供了無與倫比的可擴展性&#xff0c;減少了基礎設施管理并提高了成本效率。隨著無服務器架構變得越來越流行&#xff0c;對有效監控工具的需求對于確保最佳性能和可靠性變得至關重要。 在本文中&#xff0c;我…

Go開發運維:Go服務發布到K8S集群

目錄 一、實驗 1.Go服務發布到k8s集群 二、問題 1.如何從Harbor拉取鏡像 一、實驗 1.Go服務發布到k8s集群 &#xff08;1&#xff09;linux機器安裝go(基于CentOS 7系統) yum install go -y &#xff08;2&#xff09;查看版本 go version &#xff08;3&#xff09;創…

【參天引擎】華為參天引擎內核架構專欄開始更新了,多主分布式數據庫的特點,類oracle RAC國產數據開始出現了

cantian引擎的介紹 ?專欄內容&#xff1a; 參天引擎內核架構 本專欄一起來聊聊參天引擎內核架構&#xff0c;以及如何實現多機的數據庫節點的多讀多寫&#xff0c;與傳統主備&#xff0c;MPP的區別&#xff0c;技術難點的分析&#xff0c;數據元數據同步&#xff0c;多主節點的…

Python 中 4 個高效的技巧(建議收藏)

今天我想和大家分享 4 個省時的 Python 技巧&#xff0c;可以節省 10~20% 的 Python 執行時間。 反轉列表 Python 中通常有兩種反轉列表的方法&#xff1a;切片或 reverse() 函數調用。這兩種方法都可以反轉列表&#xff0c;但需要注意的是內置函數 reverse() 會更改原始列表…

【數據結構】C語言結構體詳解

目錄 前言 一、結構體的定義 二、定義結構體變量 三、結構體變量的初始化 四、使用typedef聲明新數據類型名 五、指向結構體變量的指針 總結 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高興與大家相識&#xff0c;希望我的博客能對你有所幫助。 &#x1f4a1…

做題筆記:SQL Sever 方式做牛客SQL的題目--查詢每天刷題通過數最多的前二名用戶

----查詢每天刷題通過數最多的前二名用戶id和刷題數 現有牛客刷題表questions_pass_record&#xff0c;請查詢每天刷題通過數最多的前二名用戶id和刷題數&#xff0c;輸出按照日期升序排序&#xff0c;查詢返回結果名稱和順序為&#xff1a; date|user_id|pass_count 表單創建…

Spring JDBC和事務管理

Spring JDBC是Spring框架用來處理關系型數據庫的模塊&#xff0c;對JDBC的API進行了封裝。 Spring JDBC的核心類為JdbcTemplate&#xff0c;提供數據CRUD方法 Spring JDBC使用步驟 Maven工程引入依賴spring-jdbc <dependency><groupId>org.springframework<…

springboot 整合nacos

Spring Boot整合Nacos 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天&#xff0c;我將帶領大家探索一個讓微服務架構更加便捷的利器——Spring Boot整合Nacos。在當今快速發展的互聯網時代&#…

應用安全:JAVA反序列化漏洞之殤

應用安全:JAVA反序列化漏洞之殤 概述 序列化是讓Java對象脫離Java運行環境的一種手段&#xff0c;可以有效的實現多平臺之間的通信、對象持久化存儲。Java 序列化是指把 Java 對象轉換為字節序列的過程便于保存在內存、文件、數據庫中&#xff0c;ObjectOutputStream類的 wri…

MYSQL創建用戶以及解決MYSQL新建數據庫看不到相關數據庫信息的解決方案

MYSQL創建用戶以及解決MYSQL新建數據庫看不到相關數據庫信息的解決方案 首先 我們在root用戶下&#xff0c;創建一個mysql用戶賬戶 如創建一個test用戶 密碼123456 命令如下&#xff1a; CREATE USER ‘test’‘localhost’ IDENTIFIED BY ‘123456’; 創建了一個db1的數據庫 …

唯創知音WTN6040F-8S語音芯片在空氣消毒機中的應用:提升用戶體驗與健康保障

在現代生活中&#xff0c;空氣質量成為人們越來越關注的問題。空氣消毒機作為一種能夠凈化空氣、殺滅病毒細菌的設備&#xff0c;受到了廣大消費者的青睞。然而&#xff0c;對于很多用戶來說&#xff0c;操作空氣消毒機可能存在一定的困惑和不便。為了解決這一問題&#xff0c;…

對Spring源碼的學習:Bean實例化流程

目錄 SpringBean實例化流程 Spring的后處理器 Bean工廠后處理器 Bean后處理器 SpringBean實例化流程 Spring容器在進行初始化時&#xff0c;會將xml配置的<bean>的信息封裝成一個BeanDefinition對象&#xff0c;所有的BeanDefinition存儲到一個名為beanDefinitionMa…

Docker容器的可視化管理工具—DockerUI本地部署與遠程訪問

文章目錄 前言1. 安裝部署DockerUI2. 安裝cpolar內網穿透3. 配置DockerUI公網訪問地址4. 公網遠程訪問DockerUI5. 固定DockerUI公網地址 前言 DockerUI是一個docker容器鏡像的可視化圖形化管理工具。DockerUI可以用來輕松構建、管理和維護docker環境。它是完全開源且免費的。基…

【GlobalMapper精品教程】066:shp轉JSON(GeoJson)案例實現

文章目錄 一、JSON與GeoJson的區別二、globalmapper實現shp轉JSON1. 加載shp數據2. shp轉json一、JSON與GeoJson的區別 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,它基于JavaScript的語法,可以將JavaScript對象中表示的一組數據轉換為字符串,在函數之…

ElasticSearch之cat recovery API

命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/recovery?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果輸出如下&#xff1a; index shard time type sta…

2023 CCF中國軟件大會(CCF ChinaSoft) “程序語義深度理解前沿進展”論壇成功召開...

2023年12月2日&#xff0c;2023年度CCF中國軟件大會軟件程序語義深度理解前沿進展論壇成功召開。 本次論壇由南京大學卜磊老師和國防科技大學陳振邦老師主持&#xff0c;計算機研究與發展期刊代表侯麗珊老師致辭&#xff0c;旨在反映程序語義理解及其應用相關研究前沿進展與實踐…

Vue之模板語法

模板語法有兩大類&#xff1a; 1.插值語法 2.指令語法 讓我為大家介紹一下吧&#xff01; 一、插值語法 功能:用于解析標簽體內容。 寫法: {{xxx}}&#xff0c;xxx是js表達式&#xff0c;且可以直接讀取到data中的所有屬性。 舉個例子&#xff1a; <!DOCTYPE html> &l…