Java XML 概述



Java XML 只是從 Java 程式中處理 XML 文件。想象一下,我們有一個檔案“products.xml”,其中包含產品詳細資訊,例如名稱、品牌和價格。

現在,我們想使用 Java 程式設計更新某些產品的價格。在編寫此類訪問 XML 文件的 Java 程式之前,我們應該瞭解 XML 的基礎知識。

什麼是 XML?

XML 代表可擴充套件標記語言 (**E**xtensible **M**arkup **L**anguage)。它是一種基於文字的標記語言,用於儲存和傳輸資料。它是自描述的,並且既可供人類閱讀,也可供機器讀取。以下是關於 XML 的一些要點:

  • XML 是一種標記語言。

  • XML 是一種基於標籤的語言,類似於 HTML。

  • XML 標籤不是預定義的,與 HTML 不同。

  • 您可以定義自己的標籤,這就是它被稱為可擴充套件語言的原因。

  • XML 標籤旨在自描述。

  • XML 是 W3C 推薦的資料儲存和資料傳輸標準。

XML 文件

XML 文件是元素的集合,以結構良好且組織良好的方式定義資料。XML 文件有兩個部分,即**文件序言**和**文件元素**。

語法

以下是 XML 文件的語法:

<?xml ?>
<root_element>
	<element></element>
	...
</root_element>

其中,

  • <?xml ?> 是 XML 宣告語句。如果包含,則必須放在第一行。
  • <root_element> 是根元素,它是所有其他元素的父元素。
  • <element> 是根元素的子元素。

示例

以下示例顯示了員工詳細資訊,其中<Employee>作為根元素,<name><role><salary>作為子元素。每個元素的資料都包含在開始和結束標籤之間。

<?xml version="1.0" ?>
<Employee>
	<name>Kiran</name>
	<role>developer</role>
	<salary>25,000</salary>
</Employee>

XML 中的元素

元素是 XML 文件的基本構建塊。它由開始標籤、內容和結束標籤組成。在 xml 文件中,應該始終有一個根元素,在其中我們可以編寫許多子元素。元素也可以在其中包含任意數量的屬性。

語法

以下是 XML 元素的語法:

<root>
	<child>
		<subchild>.....</subchild>
	</child>
</root>

其中,

  • <root> 是 XML 文件的根元素。
  • <child> 是子元素,其父元素是根元素。
  • <subchild> 是子孫元素,其父元素是子元素。

示例

讓我們看一個 DOB(出生日期)進一步細分為日期、月份和年份的示例。這裡,<DOB>是根元素,<date><month><year>是子元素。

<DOB>
	<date>27</date>
	<month>March</month>
	<year>2000</year>
</DOB>

XML 中的標籤

XML 中的標籤是自解釋的和使用者定義的。它們包含在小於 (<) 和大於 (>) 符號中。XML 區分大小寫,因此開始和結束標籤應具有相同的名稱。

示例

在以下示例中,我們編寫了一個帶有開始和結束標籤的地址元素。

<address>Hyderabad</address>

現在,讓我們看看一些編寫 XML 標籤的**不正確**方法

<Address></address>
<ADDRESS></address>
由於 XML 與 HTML 不同,它區分大小寫,因此它會丟擲錯誤:**開始和結束標籤不匹配**。

XML 中的屬性

XML 中的元素可以具有屬性。屬性是提供有關特定元素的更多特定資訊的**名稱-值**對。一個元素可以具有任意數量的屬性。

語法

以下是 XML 屬性的語法:

<element_name attribute_name="value" >content</element_name>	

其中,

  • element_name 是元素的名稱。
  • attribute_name 是屬性的名稱。
  • value 是相應屬性的值。

示例

現在,讓我們看看以下示例,其中我們為“Student”元素有四個屬性,名稱、類、分數和 DOB。

<Student name="Kiran" class="8" marks="50" DOB="27-03-2000"></Student>

使用子元素替換屬性

除了屬性之外,還可以使用子元素在元素中實現與屬性相同的功能。相同的學生示例也可以寫成如下形式

<Student>
	<name>Kiran</name>
	<class>8</class>
	<marks>50</marks>
	<DOB>27-03-2000</DOB>
</Student>
始終建議使用子元素而不是屬性。因為,子元素可以進一步擴充套件,而屬性則不能擴充套件。

在上面的示例中,如果我們進一步希望出生日期為日期、月份和年份,則可以透過為 DOB 元素使用子元素來實現,如下所示

<Student>
	<name>Kiran</name>
	<class>8</class>
	<marks>50</marks>
	<DOB>
		<date>27</date>
		<month>03</month>
		<year>2000</year>
	</DOB>
</Student>

XML 宣告

XML 宣告描述了有關整個 XML 文件的基本格式資訊,例如版本、編碼和獨立狀態。如果 XML 宣告包含在文件中,則必須將其寫入第一行。

預設情況下,如果未提及宣告,則 XML 解析器會認為文件的版本為 1.0。

語法

以下是 XML 宣告的語法:

<?xml
	version="version_number"
	encoding="encoding_type"
	standalone="standalone_status"
?>

其中,

  • XML 宣告以字元序列<?xml開頭,以字元序列?>結尾。
  • version 是使用的 XML 版本號。
  • encoding 是用於 XML 文件內容的字元編碼。
  • standalone 是一個布林屬性,其預設值為“no”。這指示 XML 文件是獨立的還是使用來自外部源的資訊來解析文件,例如 DTD(文件型別定義)。預設值為“no”。

示例

以下示例使用 XML 1.0 版本,編碼型別為 UTF-16,並且它是獨立的。

<?xml
	version="1.0"
	encoding="UTF-16"
	standalone="yes"
?>

XML 註釋

XML 中的註釋用於解釋文件的目的和詳細資訊。始終建議在文件中包含註釋,因為它使第一次閱讀文件的人員的任務變得更簡單。XML 遵循與 HTML 相同的語法。

語法

以下是單行和多行 XML 註釋的語法:

<!-- comment here -->

示例

假設我們在 2015 年收集了大學各部門的資訊。這些記錄可能會隨著時間的推移而改變。因此,在註釋中提及這一點有助於編輯人員瞭解這些詳細資訊是在何時收集的。

<?xml version = "1.0" encoding = "UTF-8" ?>
<!-- Following information is collected in the year 2015 -->
<college>
	<Department>
		<name>CSE</name>
		<code>CS</code>
		<faculty_strength>25</faculty_strength>
	</Department>
	<Department>
		<name>ECE</name>
		<code>EC</code>
		<faculty_strength>20</faculty_strength>
	</Department>
</college>

XML 名稱空間

XML 名稱空間用於解決 XML 文件中的名稱衝突。當新增兩個或多個 XML 片段時,這些 XML 程式碼片段可能會使用一些名稱相同的標籤。然後,這會使 XML 解析器感到困惑。為了避免此類名稱衝突,使用了 XML 名稱空間。

示例

假設我們建立了一個 XML 元素,其中包含關於咖啡桌的資訊:

<table>
	<shape>Oval</shape>
	<material>Wood</material>
	<seat_count>3</seat_count>
	<cost>15000</cost>
</table>

假設我們建立了另一個元素,其中包含關於餐桌的資訊:

<table>
	<shape>Rectangle</shape>
	<material>Marble</material>
	<seat_count>6</seat_count>
	<cost>25000</cost>
</table>

當上述兩個 XML 程式碼片段加在一起(在一個檔案中)時,就會發生名稱衝突。儘管兩個元素的名稱相同,但它們提供的資訊卻有所不同。在 XML 中有兩種方法可以解決這些名稱衝突。它們是:

  • 使用字首
  • 使用名稱空間宣告

使用字首

我們可以透過向元素新增字首來區分它們。為了解決上述名稱衝突,我們可以向包含咖啡桌資訊的元素新增字首“c”,類似地,我們可以為另一個元素(餐桌)新增字首“d”。

示例

讓我們以相同的表格為例,嘗試使用字首解決名稱衝突。

<!-- Coffee Table -->
<c:table>
	<shape>Oval</shape>
	<material>Wood</material>
	<seat_count>3</seat_count>
	<cost>15000</cost>
</table>

<!-- Dining Table -->
<d:table>
    <d:shape>Rectangle</d:shape>
    <d:material>Marble</d:material>
    <d:seat_count>6</d:seat_count>
    <d:cost>25000</d:cost>
</d:table>

使用字首的缺點

在使用字首時,仍然有可能兩個元素具有相同的名稱和字首。在這種情況下,衝突仍然存在。

假設如果我們新增另一個元素提供梳妝檯的資訊,為了區分,我們需要使用字首“d”。這再次在餐桌和梳妝檯之間產生衝突。因此,使用字首可以在一定程度上解決衝突,但不能完全解決。

使用“名稱空間”宣告

XML 名稱空間宣告用於有效地解決名稱衝突。使用了一個名為“xmlns”的新屬性。

語法

以下是 XML 名稱空間的語法:

<element-name xmlns:prefix="URI">

其中,

  • element-name:使用名稱空間的元素名稱。
  • xmlns:宣告名稱空間的必填關鍵字。
  • prefix:名稱空間字首。
  • URI:名稱空間識別符號。

示例

以下示例為三個表格標籤使用了 XML 名稱空間宣告。現在,餐桌和梳妝檯之間的衝突透過在其名稱空間 URI 中區分它們來解決。

<!-- Coffee Table -->
<h:table xmlns:h="/coffee">
<c:table>
	<shape>Oval</shape>
	<material>Wood</material>
	<seat_count>3</seat_count>
	<cost>15000</cost>
</table>

<!-- Dining Table -->
<d:table xmlns:h="/dining">
    <d:shape>Rectangle</d:shape>
    <d:material>Marble</d:material>
    <d:seat_count>6</d:seat_count>
    <d:cost>25000</d:cost>
</d:table>

<!-- Dressing Table -->
<d:table xmlns:h="/dressing">
    <d:brand>Trevi Furniture</d:brand>
    <d:material>Engineered wood</d:material>
    <d:cost>15000</d:cost>
</d:table>
廣告