XML——XML介紹和基本語法

from:https://blog.csdn.net/gavin_john/article/details/51511180

1.XML歷史

gml(1969)->sgml(1985)->html(1993)->xml(1998)

  • 1969 gml(通用標記語言),主要目的是要在不同的機器之間進行通信的數據規范
  • 1985 sgml(標準通用標記語言)
  • 1993 html(超文本標記語言,www網)

html語言本身是有一些缺陷的?
(1)不能自定義標簽?
(2)html本身缺少含義?
(3)html沒有真正的國際化

有一個中間過渡語言,xhtml:?
html->xhtml->xml

  • 1998 xml extensiable markup language 可擴展標記語言

2.為什么需要XML

1.需求1?
兩個程序間進行數據通信??
2.需求2?
給一臺服務器,做一個配置文件,當服務器程序啟動時,去讀取它應當監聽的端口號,還有連接數據庫的用戶名和密碼?

在XML語言中,它允許用戶自定義標簽。一個標簽用于描述一段數據;一個標簽可以分為開始標簽和結束標簽,在開始標簽和結束標簽之間,又可以使用其他標簽描述其他數據,以此來實現數據關系的描述。

3.XML常見應用

1.XML的出現解決了程序間數據傳輸的問題:?
比如QQ之間的數據傳送,用XML格式來傳送數據,具有良好的可讀性,可維護性

2.XML可以做配置文件?
XML文件做配置文件可以說非常普遍,比如我們的Tomcat服務器的server.xml,web.xml。再比如我們的structs中的structs-config.xml文件,和hibernate的hibernate.cfg.xml等等。

3.XML可以充當小型的數據庫?
XML文件可以做小型數據庫,也是不錯的選擇,我們程序中可能用到一些經常要人工配置的數據,如果放在數據庫中讀取不合適(因為這會增加維護數據庫的工作),則可以考慮直接用XML來做小型數據庫。這種方式直接讀取文件顯然要比讀數據庫快。比如msn中保存用戶聊天記錄就是用XML文件。

入門案例:用XML來記錄一個班級信息。

<?xml version="1.0" encoding="gb2312"?><class><stu id="001"><name>楊過</name> <sex>男</sex><age>20</age></stu>  <stu id="002"><name>小龍女</name>    <sex>女</sex><age>21</age></stu>
</class>

我們可以用瀏覽器打開:

XML描述班級信息

那么我們的XML能不能像html那樣顯示在網頁上呢?也是可以的,它也可以用css來修飾,但我們不用,我們只需要使用XML來存儲數據。

在這個例子中,如果我們把第一行的編碼改為utf-8,再用瀏覽器打開會報錯,這是為什么呢?

因為xml文件的默認編碼是ANSI,即美國國家標準協會制定的編碼,它根據不同的國家和地區制定了不同的標準,那么在中國就是GB2312,所以我們用GB2312編碼不會出錯,而用UTF-8會報錯。

解決辦法就是將該XML文件更改為UTF-8的編碼模式即可。

4.XML語法

一個XML文件分為如下幾部分內容:?
1.文檔聲明?
2.元素?
3.屬性?
4.注釋?
5.CDATA區、特殊字符?
6.處理指令(processing instruction)

4.1.XML語法-文檔聲明

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  • XML聲明放在XML文檔的第一行?

XML聲明由以下幾個部分組成:

version –文檔符合XML1.0規范,我們學習1.0?
encoding –文檔字符編碼,比如”GB2312”或者”UTF-8”?
standalone –文檔定義是否獨立使用?
standalone=”no”為默認值。yes代表是獨立使用,而no代表不是獨立使用

4.2.XML語法-元素(或者叫標記、節點)

(1)每個XML文檔必須有且只有一個根元素

  • 根元素是一個完全包括文檔中其他所有元素的元素
  • 根元素的起始標記要放在所有其他元素的起始標記之前
  • 跟元素的結束標記要放在所有其他元素的結束標記之后

(2)XML元素指的是XML文件中出現的標簽,一個標簽分為開始標簽和結束標簽,一個標簽有如下幾種書寫方式,例如

  • 包含標簽體:
<a>www.sohu.com</a>
  • 不含標簽體的:
<a></a>,簡寫為:<a/>
  • (3)一個標簽中也可以嵌套若干子標簽。但所有標簽必須合理地嵌套,絕對不允許交叉嵌套,例如
<a>welcome to <b> www.sohu.com </a></b>
  • 這種情況肯定是要報錯的。

(4)對于XML標簽中出現的所有空格和換行,XML解析程序都會當做標簽內容進行處理。例如下面兩段內容的意義是不一樣的。

<stu>xiaoming</stu>
  • 和如下:
<stu>xiaoming
</stu>

(5)由于在XML中,空格和換行都作為原始內容被處理,所以,在編寫XML文件時,要特別注意。

(6)命名規范:一個XML元素可以包含字母、數字以及其它一些可見字符,但必須遵守以下規范:

  • 區分大小寫,例如,元素P和元素p是兩個不同的元素
  • 不能以數字或下劃線”_”開頭
  • 元素內不能包含空格
  • 名稱中間不能包含冒號(:)
  • 可以使用中文,但一般不這么用

4.3.XML語法-屬性

<student id="100"><name>Tom</name>
</student>

(1)屬性值用雙引號(”)或單引號(’)分隔,如果屬性值中有單引號,則用雙引號分隔;如果有雙引號,則用單引號分隔。那么如果屬性值中既有單引號還有雙引號怎么辦?這種要使用實體(轉義字符,類似于html中的空格符),XML有5個預定義的實體字符,如下:

XML實體字符

(2)一個元素可以有多個屬性,它的基本格式為:

<元素名 屬性名1="屬性值1" 屬性名2="屬性值2">
  • (3)特定的屬性名稱在同一個元素標記中只能出現一次?

(4)屬性值不能包括<,>,&,如果一定要包含,也要使用實體

4.4.XML語法-注釋

XML的注釋類似于HTML中的注釋:

<!--這是一個注釋-->
  • (1)注釋內容不要出現--?

(2)不要把注釋放在標記中間;?
(3)注釋不能嵌套?
(4)可以在除標記以外的任何地方放注釋

4.5.XML語法-CDATA節

假如有這么一個需求,需要通過XML文件傳遞一幅圖片,怎么做呢?其實我們看到的電腦上的所有文件,本質上都是字符串,不過它們都是特殊的二進制字符串。我們可以通過XML文件將一幅圖片的二進制字符串傳遞過去,然后再解析成一幅圖片。那么這個字符串就會包含大量的<,>,&或者“等一些特殊的不合法的字符。這時候解析引擎是會報錯的。

所以,有些內容可能不想讓解析引擎解析執行,而是當做原始內容處理,用于把整段文本解釋為純字符數據而不是標記。這就要用到CDATA節。

語法如下:

<![CDATA[......
]]>

CDATA節中可以輸入任意字符(除]]>外),但是不能嵌套!

如下例,這種情況它不會報錯,而如果不包含在CDATA節中,就會報錯:

<stu id="001"><name>楊過</name> <sex>男</sex><age>20</age><intro><![CDATA[ad<<&$^#*k]]></intro>
</stu>

.6.XML語法-處理指令

處理指令,簡稱PI(processing instruction)。處理指令用來指示解析引擎如何解析XML文件,看下面一個例子:

比如我們也可以使用css樣式表來修飾XML文件,編寫my.css如下:

name{font-size:80px;font-weight:bold;color:red;
}sex{font-size:60px;font-weight:bold;color:blue;
}sex{font-size:40px;font-weight:bold;color:green;
}

我們在xml文件中使用處理指令引入這個css文件,如下:

<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet href="my.css" type="text/css"?>
<class><stu id="001"><name>楊過</name> <sex>男</sex><age>20</age></stu>  <stu id="002"><name>小龍女</name>    <sex>女</sex><age>21</age></stu>
</class>

這時候我們再用瀏覽器打開這個xml文件,會發現瀏覽器解析出一個帶樣式的視圖,而不再是單純的目錄樹了:

XML修改樣式

但是XML的處理指令不要求掌握,因為用到的很少。

5.格式正規的XML文檔-小結

語法規范

1.XML聲明語句?
2.必須有一個根元素?
3.標記大小寫敏感?
4.屬性值用引號?
5.標記成對?
6.空標記關閉?
7.元素正確嵌套

from:https://blog.csdn.net/qq_38254978/article/details/77870598

什么是xml文件格式

  • 我們要給對方傳輸一段數據,數據內容是“too young,too simple,sometimes naive”,要將這段話按照屬性拆分為三個數據的話,就是,年齡too young,閱歷too simple,結果sometimes naive。我們都知道程序不像人,可以體會字面意思,并自動拆分出數據,因此,我們需要幫助程序做拆分,因此出現了各種各樣的數據格式以及拆分方式。比如,可以是這樣的數據為“too young,too simple,sometimes naive”然后按照逗號拆分,第一部分為年齡,第二部分為閱歷,第三部分為結果。
  • 也可以是這樣的數據為“too_young*?too_simple*sometimes_naive”從數據開頭開始截取前面十一個字符,去掉號并把下劃線替換為空格作為第一部分,再截取接下來的十一個字符同樣去掉并替換下劃線為空格作為第二部分,最后把剩下的字符同樣去號體會空格作為第三部分。
  • 這兩種方式都可以用來容納數據并能夠被解析,但是不直觀,通用性也不好,而且如果出現超過限定字數的字符串就容納不了,也可能出現數據本身就下劃線字符導致需要做轉義。基于這種情況,出現了xml這種數據格式, 上面的數據用XML表示的話可以是這樣
<person age="too young" experience="too simple" result="sometimes naive" />

也可以是這樣

<person><age value="too young" /><experience value="too simple" /><result value="sometimes naive" />
</person>

兩種方式都是xml,都很直觀,附帶了對數據的說明,并且具備通用的格式規范可以讓程序做解析。如果用json格式來表示的話,就是下面這樣看出來沒,其實數據都是一樣的,不同的只是數據的格式而已,同樣的數據,我用xml格式傳給你,你用xml格式解析出三個數據,用json格式傳給你,你就用json格式解析出三個數據,還可以我本地保存的是xml格式的數據,我自己先解析出三個數據,然后構造成json格式傳給你,你解析json格式,獲得三個數據,再自己構造成xml格式保存起來,說白了,不管是xml還是json,都只是包裝數據的不同格式而已,重要的是其中含有的數據,而不是包裝的格式。

XML文件創建格式

  • 例:
<?xml version="1.0" encoding="utf-8" ?>
<root><part id = "01" name="選項一"><name>我是徐茅山</name><age>今年20歲</age><sex>男</sex></part><part id="02" name="選項二"><name>我是李逍遙</name><age>今年22歲</age><sex>男</sex></part>
</root>
  • 開始的

xml文件的解析

  • 這里只是簡單的提一下關于xml文件的解析,我使用的是比較流行的dom4j解析,[dom4j的文件下載地址](“https://dom4j.github.io/“)
  • 實例:
package com.xinsi.qi.utils;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;public class Dom4jXml {public void test(){try {File inputFile = new File("F:\\J2EE學習資料\\demoLes03\\web\\WEB-INF\\test.xml");SAXReader reader = new SAXReader();Document document = reader.read(inputFile);System.out.println("Root element :"+document.getRootElement().getName());Element classElement = document.getRootElement();List<Node> nodes = document.selectNodes("/class/part[@id='02']");System.out.println("--------------------");for (Node node:nodes){System.out.println("標簽名=:"+node.getName());System.out.println("姓名:"+node.selectSingleNode("name").getText());System.out.println("年齡:"+node.selectSingleNode("age").getText());System.out.println("性別:"+node.selectSingleNode("sex").getText());}} catch (Exception e1) {e1.printStackTrace();}}}
  • 首先創建一個xml文件,這里使用的xml文件就是上面的xml例子,使用dom4j,先創建文件,將文件引入。
 File inputFile = new File("F:\\J2EE學習資料\\demoLes03\\web\\WEB-INF\\test.xml");
  • 再創建dom4j的讀取文件類,來讀取xml文件
  SAXReader reader = new SAXReader();
  • Document是獲取根元素類,控制臺輸出時,如下
System.out.println("Root element :"+document.getRootElement().getName());
輸出Root element :root,該文件的根元素名稱為root

Element類是獲取根元素內的元素

  • List nodes = document.selectNodes(“/class/part[@id=’02’]”) 這段代碼的意思是,定位到該元素屬性的位置,使用該方法還需要下載,jaxen.jar包,jaxen的下載地址
  • @id=’02’的意思是定位到id為02的元素屬性,以遍歷的形式輸出出來。
for (Node node:nodes){
System.out.println("標簽名=:"+node.getName());
System.out.println("姓名:"+node.selectSingleNode("name").getText());
System.out.println("年齡:"+node.selectSingleNode("age").getText());
System.out.println("性別:"+node.selectSingleNode("sex").getText());
}
  • 最終控制臺的輸出結果為:
標簽名=:part
姓名:我是李逍遙
年齡:今年22歲
性別:男

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

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

相關文章

Tomcat7.0安裝配置

很久沒有通過博客對學習所得進行記錄了。 現在將使用Tomcat的一些經驗和心得寫到這里&#xff0c;作為記錄和備忘。如果有朋友看到&#xff0c;也請不吝賜教。 首先&#xff0c;我個人使用的是apache-tomcat-7.0.27你可以下載使用&#xff0c;前提條件你需要安裝JDK1.6或者1.7都…

TIFF圖像文件格式詳解

from&#xff1a;https://www.cnblogs.com/gywei/p/3393816.html 1 什么是TIFF&#xff1f; TIFF是Tagged Image File Format的縮寫。在現在的標準中&#xff0c;只有TIFF存在&#xff0c; 其他的提法已經舍棄不用了。做為一種標記語言&#xff0c;TIFF與其他文件格式最大的不…

java 抽象工廠模式簡單實例

抽象工廠模式&#xff1a;提供一個創建一系列的相關的或者依賴的對象的接口&#xff0c;無需指定它們的具體實現類&#xff0c;具體的時間分別在子類工廠中產生。 類似于工廠模式&#xff1a;隔離了具體類的生產實現&#xff0c;使得替換具體的工廠實現類很容易。包含有以下模塊…

圖像處理之積分圖應用三(基于NCC快速相似度匹配算法)

from&#xff1a;https://blog.csdn.net/jia20003/article/details/53021614 圖像處理之積分圖應用三&#xff08;基于NCC快速相似度匹配算法&#xff09; 基于Normalized cross correlation(NCC)用來比較兩幅圖像的相似程度已經是一個常見的圖像處理手段。在工業生產環節檢測…

深入淺出地理解機器人手眼標定

from&#xff1a;https://blog.csdn.net/qq_16481211/article/details/79764730 所謂手眼系統&#xff0c;就是人眼鏡看到一個東西的時候要讓手去抓取&#xff0c;就需要大腦知道眼鏡和手的坐標關系。如果把大腦比作B&#xff0c;把眼睛比作A&#xff0c;把手比作C,如果A和B的…

centos 6.5 安裝 mongodb

官方給出的鏈接地址&#xff1a;https://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/ 安裝后重要的日志 win10 上使用mongochef連接不上數據庫 解決方案&#xff1a; 修改 /etc/mongod.conf 將bindIP 改為0.0.0.0 監聽外網轉載于:https://www.cnblogs.com/l…

scala學習資料

1. scala-sbt 構建工具&#xff1a; http://www.scala-sbt.org/0.13/docs/zh-cn/Directories.html 2. 資料&#xff1a; http://www.ibm.com/developerworks/cn/java/j-lo-funinscala2/ https://www.zhihu.com/question/34548588?sortcreated http://nerd-is.in/2013-09/scala…

opencv3/C++ 機器學習-SVM應用實例:藥品(膠囊)識別與分類

from&#xff1a;https://blog.csdn.net/akadiao/article/details/79278072 版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/akadiao/article/details/79278072 問題描述&#xff1a; 現對6種不同顏色藥品&#xff08;膠囊…

Elasticsearch 搜索不到數據問題(_mapping 設置)

需求 由于 kibana3 中&#xff0c;不支持直接在請求的 url 中設置搜索的 type &#xff08;是不是我不知道&#xff1f;&#xff1f;&#xff1f;&#xff09;。 為了支持特定 type 的搜索&#xff0c;所以我設置了個下每個 panel 的查詢語句&#xff0c;讓它增加一個&#xff…

SVM之交叉驗證【轉】

交叉驗證(CrossValidation)方法思想簡介 以下簡稱交叉驗證(Cross Validation)為CV.CV是用來驗證分類器的性能一種統計分析方法,基本思想是把在某種意義下將原始數據(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set),首先用訓練集對分類器進…

linux命令學習-1-less

less 工具也是對文件或其它輸出進行分頁顯示的工具&#xff0c;應該說是linux正統查看文件內容的工具&#xff0c;功能極其強大。less 的用法比起 more 更加的有彈性。在 more 的時候&#xff0c;我們并沒有辦法向前面翻&#xff0c; 只能往后面看&#xff0c;但若使用了 less …

python問題匯總

問題1&#xff1a;如何解決python3中numpy報錯No module named numpy 打開terminal pip3 install numpy 問題2&#xff1a;ModuleNotFoundError No module named matplotlib 打開terminal pip3 install matplotlib

jspspy database help

.轉載于:https://www.cnblogs.com/outline/p/5316051.html

SVM 調參策略

轉自&#xff1a;SVM 調參策略&#xff1a;https://blog.csdn.net/u014484783/article/details/78220646 SVM 怎樣能得到好的結果 1. 對數據做歸一化&#xff08;simple scaling&#xff09; 2. 應用 RBF kernel 3. 用cross-validation和grid-search 得到最優的c和g 4. 用…

美好的?天 從ActionTab開始 美觀、智能、?效的新標簽? iTab 新標簽頁iTab新標簽頁Atop100工具推薦

文章目錄 ActionTabiTab 新標簽頁iTab新標簽頁&#xff0c;小組件&#xff0c;起始頁&#xff0c;標簽頁&#xff0c;日歷&#xff0c;股票&#xff0c;瀏覽器擴展 https://www.actiontab.cn/ ActionTab 收費&#xff1f;&#xff1f;&#xff1f;&#xff1f; iTab 新標簽頁iT…

Oracle學習之merge

--使用merge語句 create table new as select * from emp where 10; insert into new (empno,ename) select empno,ename from emp where deptno10;merge into new n using emp e on (n.empnoe.empno) when matched then update set n.sale.salwhen not matched then insert (…

機器學習中的算法(2)-支持向量機(SVM)基礎

from:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/18/2034566.html 版權聲明&#xff1a; 本文由LeftNotEasy發布于http://leftnoteasy.cnblogs.com, 本文可以被全部的轉載或者部分使用&#xff0c;但請注明出處&#xff0c;如果有問題&#xff0c;請聯系wheeleastgm…

HDU 2586 How far away ?【LCA】

題目鏈接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid2586 題意&#xff1a; 無向圖&#xff0c;給定邊及邊權重&#xff0c;任意兩點之間都有一條唯一的道路&#xff0c;道路上每個點只能出現一次。給定詢問&#xff0c;求詢問的結點之間的距離。 分析&#xff1…

深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件

from:https://blog.csdn.net/xianlingmao/article/details/7919597 在求取有約束條件的優化問題時&#xff0c;拉格朗日乘子法&#xff08;Lagrange Multiplier) 和KKT條件是非常重要的兩個求取方法&#xff0c;對于等式約束的優化問題&#xff0c;可以應用拉格朗日乘子法去求…

android一些若干回調測試

1.activity&#xff1a;onAttachedToWindow在onResume后回調 2.onCreate和onResume調用間隔為29ms, onAttachedToWindow和OnResume相差11ms, viewTreeObserver:OnGloballayout和onAttachedtoWindow相差19ms 注:以上的測試時間間隔不能保證精確相同&#xff0c;但是可以從中看出…