XML文件節點導航與選擇指南

小万哥丶發表於2024-04-08

XPath(XML Path Language)是XSLT標準的主要組成部分。它用於在XML文件中瀏覽元素和屬性,提供了一種強大的定位和選擇節點的方式。

XPath的基本特點

image

  • 代表XML路徑語言: XPath是一種用於在XML文件中導航和選擇節點的語言。

  • 路徑樣式語法: XPath使用路徑表示式的“路徑樣式”語法來標識和導航XML文件中的節點。

  • 包含200多個內建函式: XPath包含200多個內建函式,可用於處理字串、數值、布林值、日期和時間等。

  • XSLT的主要組成部分: XPath是XSLT(可擴充套件樣式表語言轉換)標準的主要組成部分,用於在XML文件中選擇和運算元據

XPath路徑表示式

XPath使用路徑表示式來選擇XML文件中的節點或節點集。這些路徑表示式類似於在傳統計算機檔案系統中使用的路徑表示式。

例如,/bookstore/book/title 是一個XPath路徑表示式,表示選擇根元素是bookstore的子元素book的子元素title

XPath標準函式

XPath包括200多個內建函式,用於處理不同型別的資料。這些函式涵蓋了字串值、數值、布林值、日期和時間比較、節點操作、序列操作等。

XPath表示式也可以在多種程式語言中使用,如JavaScript、Java、XML Schema、PHP、Python、C和C++等。

XPath用於XSLT

XPath是XSLT標準的主要組成部分,它與XSLT一起用於對XML文件進行轉換和樣式處理。具有XPath知識可以充分發揮XSLT的強大功能

XPath節點

在XPath中,有七種節點:元素、屬性、文字、名稱空間、處理指令、註釋和根節點。XML文件被視為節點樹,樹的最頂層元素稱為根元素。

XPath術語

  • 節點(Node): 在XPath中,有七種節點,包括元素、屬性、文字、名稱空間、處理指令、註釋和根節點。XML文件被視為節點樹,樹的最頂層元素稱為根元素。

  • 原子值(Atomic Value): 原子值是沒有子節點或父節點的節點。例如,字串或數字。

  • 專案(Item): 專案可以是原子值或節點。

節點之間的關係

在XPath中,節點之間有不同的關係:

  • 父節點(Parent Node): 每個元素和屬性都有一個父節點。

  • 子節點(Child Node): 元素節點可以有零、一個或多個子節點。

  • 同級節點(Sibling Node): 具有相同父節點的節點。

  • 祖先節點(Ancestor Node): 節點的父節點、父節點的父節點等。

  • 後代節點(Descendant Node): 節點的子節點、子節點的子節點等。

XPath語法

XPath使用路徑表示式在XML文件中選擇節點。以下是一些常用的XPath路徑表示式:

  • nodename:選擇所有名稱為 "nodename" 的節點。
  • /:從根節點選擇。
  • //:選擇文件中與選擇匹配的當前節點的位置無關的節點。
  • .:選擇當前節點。
  • ..:選擇當前節點的父節點。
  • @:選擇屬性。

XPath示例文件

以下是我們將在下面的示例中使用的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book>
    <title lang="en">Harry Potter</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="en">Learning XML</title>
    <price>39.95</price>
  </book>
</bookstore>

選擇節點示例

以下是一些XPath路徑表示式的示例及其結果:

  • /bookstore:選擇所有名稱為 "bookstore" 的節點。
  • /bookstore/book:選擇根元素 bookstore 的子元素 book
  • //title[@lang='en']:選擇所有具有值為 "en" 的 "lang" 屬性的 title 元素。

選擇未知節點

XPath萬用字元可用於選擇未知的XML節點:

  • *:匹配任何元素節點。
  • @*:匹配任何屬性節點。
  • node():匹配任何型別的節點。

例如,/bookstore/* 選擇 bookstore 元素的所有子元素節點。

選擇多個路徑

透過在XPath表示式中使用 | 運算子,您可以選擇多個路徑:

  • //book/title | //book/price:選擇所有 book 元素的 titleprice 元素。

  • /bookstore/book/title | //price:選擇 bookstore 元素的 book 元素的 title 元素 和 文件中的所有 price 元素。

XPath Axes(軸)

XML示例文件

以下是我們將在下面的示例中使用的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book>
    <title lang="en">Harry Potter</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="en">Learning XML</title>
    <price>39.95</price>
  </book>
</bookstore>

XPath軸

在XPath中,軸表示與上下文(當前)節點的關係,並用於在樹上相對於該節點定位其他節點。以下是常用的XPath軸及其描述:

  • ancestor: 選擇當前節點的所有祖先(父、祖父等)。

  • ancestor-or-self: 選擇當前節點的所有祖先(父、祖父等)以及當前節點本身。

  • attribute: 選擇當前節點的所有屬性。

  • child: 選擇當前節點的所有子節點。

  • descendant: 選擇當前節點的所有後代(子、孫等)。

  • descendant-or-self: 選擇當前節點的所有後代(子、孫等)以及當前節點本身。

  • following: 選擇當前節點結束標籤之後的文件中的所有內容。

  • following-sibling: 選擇當前節點之後的所有同級節點。

  • namespace: 選擇當前節點的所有名稱空間節點。

  • parent: 選擇當前節點的父節點。

  • preceding: 選擇文件中在當前節點之前出現的所有節點,但不包括祖先、屬性節點和名稱空間節點。

  • preceding-sibling: 選擇當前節點之前的所有同級節點。

  • self: 選擇當前節點。

位置路徑表示式

位置路徑可以是絕對的或相對的。絕對位置路徑以斜槓(/)開頭,而相對位置路徑則不是。位置路徑由一個或多個步驟組成,每個步驟之間用斜槓分隔。

以下是一些XPath位置路徑表示式的示例及其結果:

  • /child::book:選擇所有作為當前節點子元素的 book 節點。

  • /attribute::lang:選擇當前節點的 lang 屬性。

  • /child::*:選擇當前節點的所有元素子節點。

  • /attribute::*:選擇當前節點的所有屬性。

  • /child::text():選擇當前節點的所有文字節點子節點。

  • /child::node():選擇當前節點的所有子節點。

  • /descendant::book:選擇當前節點的所有 book 後代。

  • /ancestor::book:選擇當前節點的所有 book 祖先。

  • /ancestor-or-self::book:選擇當前節點的所有 book 祖先,如果當前節點本身是一個 book 節點,也選擇當前節點本身。

  • /child::*/child::price:選擇當前節點的所有 price 孫子節點。

XPath運算子

XPath表示式返回一個節點集、一個字串、一個布林值或一個數字。以下是XPath表示式中可用的運算子列表:

  • |:計算兩個節點集。

  • +:加法。

  • -:減法。

  • *:乘法。

  • div:除法。

  • =:等於。

  • !=:不等於。

  • <:小於。

  • <=:小於或等於。

  • >:大於。

  • >=:大於或等於。

  • or:或。

  • and:與。

  • mod:取模(除法餘數)。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章