XML DOM 節點

根據 XML DOM,XML 文檔中的所有內容都是節點

  • 整個文檔就是一個文檔節點
  • 每個 XML 元素都是一個元素節點
  • XML 元素中的文本是文本節點
  • 每個屬性都是一個屬性節點
  • 注釋屬于注釋節點

DOM Example

請看以下 XML 文件 (books.xml):

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="美食">
  <title lang="zh">雅舍談吃</title>
  <author>梁實秋</author>
  <press>江蘇文藝出版社</press>
  <year>2013</year>
  <price>35</price>
  <ISBN>9787539962771</ISBN>
</book>
<book category="兒童">
  <title lang="zh">了不起的狐貍爸爸</title>
  <author>羅爾德·達爾</author>
  <translator>代維</translator>
  <press>明天出版社</press>
  <year>2009</year>
  <price>10</price>
  <ISBN>9787533259563</ISBN>
</book>
<book category="文學">
  <title lang="zh">將熟悉變為陌生</title>
  <author>齊格蒙·鮑曼</author>
  <author>彼得·哈夫納</author>
  <translator>王立秋</translator>
  <press>南京大學出版社</press>
  <year>2023</year>
  <price>68</price>
  <ISBN>9787305269387</ISBN>
</book>
<book category="科學">
  <title lang="zh">你想飛嗎,像鳥一樣?</title>
  <author>理查德·道金斯</author>
  <author>亞娜·倫佐娃</author>
  <translator>高天羽</translator>
  <press>湖南科學技術出版社</press>
  <year>2023</year>
  <price>88</price>
  <ISBN>9787571019075</ISBN>
</book>
<book category="政治" cover="平裝">
  <title lang="zh">論美國的民主</title>
  <author>托克維爾</author>
  <translator>董果良</translator>
  <press>商務印書館</press>
  <year>1989</year>
  <price>60</price>
  <ISBN>9787100124553</ISBN>
</book>
</bookstore>

在上面的 XML 中,根節點是 <bookstore>。

文檔中的所有其他節點都被包含在 <bookstore> 中。

根節點 <bookstore> 擁有 5 個 <book> 節點。

第一個 <book> 節點包含 6 個子節點:<title>、<author>、<press>、<year>、<price> 和 <ISBN>。

其中的每個子節點都包含一個文本節點:

  • “雅舍談吃”
  • “梁實秋”
  • “江蘇文藝出版社”
  • “2012”
  • “48.00”
  • “9787100011105”

文本始終存儲在文本節點中

在 DOM 處理中一個普遍的錯誤是,認為元素節點包含文本。

然而,元素節點的文本存儲在文本節點中。

在這個例子中:<year>2013</year>,元素節點 <year> 包含值為 "2012" 的文本節點。

"2012" 不是 <year> 元素的值!

XML DOM 節點樹

XML DOM 把 XML 文檔視為一種樹結構。這種樹結構被稱為節點樹

可通過這棵樹訪問所有節點。可以修改或刪除它們的內容,也可以創建新的元素。

這顆節點樹展示了節點的集合,以及它們之間的聯系。這棵樹從根節點開始,然后在樹的最低層級向文本節點長出枝條:

DOM 節點樹

上圖表示 XML 文件 books.xml

父、子和同胞節點

節點樹中的節點彼此之間都有等級關系。

術語“父”、“子”和“同胞”用于描述這種關系。父節點有子節點。位于相同層級上的子節點稱為同級節點或同胞節點(兄弟或姐妹)。

  • 在節點樹中,頂部節點稱為根
  • 除根節點外,每個節點都只有一個父節點
  • 節點可以有任意數量的子節點
  • 葉子是沒有子節點的節點
  • 同胞節點是擁有相同父節點的節點

下圖展示了節點樹的一部分,以及節點之間的關系:

DOM 節點樹

因為 XML 數據是按照樹的形式進行構造的,所以可以在不了解樹的確切結構且不了解其中包含的數據類型的情況下,對其進行遍歷。

您將在本教程稍后的章節學習更多有關遍歷節點樹的知識。

注釋:父節點:Parent Node,子節點:Children Node,同級節點:Sibling Node。

第一個子節點 - 最后一個子節點

請查看以下 XML 片段:

<bookstore>
  <book category="美食">
    <title lang="zh">雅舍談吃</title>
    <author>梁實秋</author>
	<press>江蘇文藝出版社</press>
    <year>2013</year>
    <price>35</price>
	<ISBN>9787100011105</ISBN>
  </book>
</bookstore>

在上面的 XML 中,<title> 元素是 <book> 元素的第一個子節點,<ISBN> 元素是 <book> 元素的最后一個子節點。

此外,<book> 元素是 <title>、<author>、<year>、<press>、<price> 和 <ISBN> 元素的父節點。