首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

XML 基礎語法全解析:文檔聲明、元素屬性、CDATA、轉義字符與命名規範

     編輯:Java 綜合教學

XML 核心定位:可擴展標記語言

XML (Extensible Markup Language) 設計目的是 傳輸和存儲數據,而非顯示數據(HTML 的職責)。核心特征:可擴展(自定義標籤)、結構化(樹狀層級)、自描述(標籤即語義)。

版本現狀:XML 1.0 為主流,1.1 不向後兼容,極少使用。

XML 文檔六大構成部分

  1. 文檔聲明 (XML Declaration)
  2. 元素/標籤 (Elements/Tags)
  3. 屬性 (Attributes)
  4. 註釋 (Comments)
  5. CDATA 區域
  6. 處理指令 (Processing Instructions, PI)

1. 文檔聲明:必須位於第一行

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
屬性 說明 建議值
version XML 版本 "1.0"
encoding 字符編碼 UTF-8(通用、無 BOM、支持全字符集)
standalone 是否獨立(不依賴外部 DTD/實體) "yes" 或 "no",通常省略

亂碼根治:文件保存編碼、聲明編碼、解析器編碼、數據庫/傳輸編碼 四者統一為 UTF-8。

編碼設置

2. 元素:XML 的核心構建塊

語法形式

  • 雙標籤:<book>Java編程思想</book>
  • 單標籤(空元素):<br/>、<img src="a.jpg"/>

嵌套規則:嚴格樹狀結構

<!-- 正確:層級清晰 -->
<library>
  <book>
    <title>Effective Java</title>
    <author>Joshua Bloch</author>
  </book>
</library>

<!-- 錯誤:交叉嵌套 -->
<book><title>...</book></title>

根元素唯一性

整個文檔 有且僅有一個 根元素包裹所有內容。

命名規範(硬性約束)

規則 說明 正例 反例
大小寫敏感 <Book> ≠ <book> <book> <Book> </book>
首字符限制 字母/下劃線/冒號(不推薦冒號) <book> <_book> <1book> <-book>
保留前綴 不能以 xml/XML/XmL 等任意大小寫組合開頭 <myXml> <xmlBook>
字符集限制 不含空格、換行、制表符 <book_name> <book name>
冒號用途 命名空間分隔符,非必要勿用 <ns:book> <book:1>

3. 屬性:元素的元數據

<book id="bk101" category="programming">
  <title>Effective Java</title>
</book>

規則

  • 同一元素屬性名唯一
  • 值必須用單/雙引號包裹:id='bk101' 或 id="bk101"
  • 命名規範同元素

屬性 vs 子元素:設計決策指南

元數據(標識、分類、配置)用屬性;業務數據(內容、結構、可擴展)用子元素。

子元素優勢:支持復雜結構、樹狀層級、易擴展、易讀、可驗證(Schema)。

<!-- 屬性風格(不推薦用於業務數據) -->
<note date="08/08/2008" to="George" from="John" heading="Reminder" body="Don't forget!" />

<!-- 子元素風格(推薦) -->
<note>
  <date><day>08</day><month>08</month><year>2008</year></date>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

<!-- 適合屬性的場景:ID、類型標識 -->
<messages>
  <note id="501"><to>George</to>...</note>
  <note id="502"><to>John</to>...</note>
</messages>

4. 註釋

<!-- 這是註釋,可多行 -->
<!-- 註釋不能嵌套:<!-- 內層 --> 外層 -->  -->

5. 特殊字符轉義(預定義實體引用)

字符 實體引用 數字引用
< &lt; <
> &gt; >
& &amp; &
" &quot; "
' &apos; '

在屬性值中同樣需要轉義。

6. CDATA 區域:原文本塊

<![CDATA[
  這裡的 < > & " ' 都不會被解析
  適合存放:腳本代碼、SQL 語句、HTML 片段、JSON 數據
]]>
  • 解析器原樣輸出,不做任何處理
  • 不能包含 ]]> 序列
  • 無嵌套 CDATA

7. 處理指令 (PI)

<?target instruction?>
  • 指導解析器/應用程序如何處理文檔
  • 文檔聲明本質上是 PI:<?xml ...?>
  • 常見:<?xml-stylesheet type="text/xsl" href="style.xsl"?> 關聯 XSLT 樣式表

XML 應用場景總結

  • 配置文件:Spring applicationContext.xml、Maven pom.xml、Log4j log4j2.xml
  • 數據交換:Web Service (SOAP)、API 響應、異構系統集成
  • 文檔存儲:Office Open XML (docx/xlsx)、SVG 矢量圖形、XHTML
  • 元數據描述:部署描述符 web.xml、持久化映射 orm.xml

驗證技術:DTD vs Schema (XSD)

特性 DTD XSD (Schema)
語法 非 XML 格式 XML 格式,自描述
數據類型 無(僅 PCDATA) 豐富類型系統
命名空間 不支持 原生支持
擴展性 差 強(繼承、引用、複雜類型)
現狀 歷史遺留 主流標準

最佳實踐建議

  1. 始終包含文檔聲明,指定 encoding="UTF-8"
  2. 使用有語義的元素/屬性名,遵循駝峰或下劃線統一風格
  3. 業務數據用子元素,ID/類型/標識用屬性
  4. 大量特殊字符內容使用 CDATA
  5. 生產環境配置文件建議關聯 XSD 校驗
  6. 解析選擇:DOM(小文檔、隨機訪問)、SAX/StAX(大文檔、流式處理)、JAXB(對象綁定)

XML 雖在 JSON、YAML 衝擊下在配置、API 領域份額下降,但其嚴格的結構化、驗證、命名空間、混合內容能力,在企業級集成、文檔標準、元數據管理等領域仍不可替代。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved