若要在 Chrome 中測試 XPath 選取器,請將格式正確的 XML 測試資料貼到 XPath Tester,輸入 XPath 1.0 運算式並加以評估,即可檢查確切的結果類型及序列化比對結果。XPath Tester 使用 Chrome 的原生 DOM 介面:它會將貼上的來源解析為 application/xml,讓文件與目前頁面保持分離,並呼叫 Document.evaluate,使瀏覽器回報運算式的自然結果類型。因此,成功檢查後可能會傳回節點集、字串、數字或布林值,而不必強制將每個查詢都轉成清單。來源與結果會保留在目前分頁的記憶體中,且不會上傳;比對到的標記會以可見文字呈現,而不是插入實際頁面。這項工具適合先以受控的 XML 範例檢查運算式,再將其套用至網站、API 回應、自動化指令碼或伺服器端解析器。它不會擷取文件、跟隨連結或執行 XML 中的指令碼,因此請自行提供具代表性的測試資料。請將成功選取器的結果視為節點選取方面的證據,而非 XML 符合業務規則或結構描述需求的證明。

how to test xpath selector in chrome
如何在 Chrome 中測試 XPath 選取器

Chrome 式檢查的實際運作方式

Chrome DevTools 可以檢查即時 DOM,但 XPath 運算式必須依據實際面對的文件、命名空間內容及實作來判斷。XPath Tester 會將這些變數分開處理。它會在目前分頁中針對分離於頁面、置於記憶體內的 XML 文件進行評估,因此成功比對不會改變你正在檢查的頁面。

輸入內容會透過 DOMParser.parseFromString 解析。parsererror 文件會視為失敗,因此標籤不相符及其他格式錯誤的 XML 都會在 XPath 評估前停止。評估後,元素會序列化為可見輸出,屬性會使用明確的 @ 表示法,而文字與註解節點則會加上可見標籤。這些輸出都不會以標記形式插入即時 DOM。若要執行其他工作,也就是針對已在 Chrome 主控台中載入的 XML 文件執行 XPath,請使用 在 Chrome 主控台中針對任何 XML 檢查 XPath。這裡使用的分離測試資料方法,重點在於部署前進行可重複的輸入與具類型的檢查。

在 Chrome 中測試 XPath 選取器

請使用能代表你在正式環境中預期 XML 結構的小型測試資料。簡短且聚焦的範例,比大型文件更容易讓人找出語法與命名空間錯誤。

  1. 貼上具代表性的 XML 測試資料。來源必須是格式正確的 XML,最多可包含 500,000 個字元。請使用 XML 回應或事先準備好的測試資料,而非任意 HTML,因為輸入內容會解析為 application/xml。
  2. 明確宣告命名空間前綴。當運算式使用 b:book 或其他帶前綴的名稱時,請在文件元素上放置如 xmlns:b="urn:books" 的宣告。
  3. 輸入一個 XPath 1.0 運算式。運算式最多可包含 2,000 個字元。請從特定路徑開始,例如 /catalog/book/title、縮寫的絕對路徑,例如 //book/title,或函式呼叫,例如 count(//book)。
  4. 執行評估。瀏覽器會針對分離的 XML 文件評估運算式。如果 XML 無法解析,請先修正來源,再變更 XPath 運算式。
  5. 確認自然結果類型。輸出可能是節點集、字串、數字或布林值。這項差異有助於你判斷運算式是選取了節點,還是計算出純量值。
  6. 檢查確切的序列化比對結果。節點集結果會依編號逐行顯示。元素會以可見方式序列化,屬性會帶有明確的 @ 表示法,而文字與註解節點則會加上標籤。
  7. 執行正向及零比對檢查。請確認預期節點都有出現,而且刻意設為狹窄且不存在的路徑會產生有效的零節點結果,而不是錯誤。
  8. 在目的地執行環境中重新測試運算式。請在實際使用運算式的位置執行,例如自動化程式庫或伺服器端 XML 解析器,因為該環境可能實作不同的 XPath 版本或命名空間政策。

先閱讀結果類型,再檢視比對結果

評估器會使用 ANY_TYPE,因此 Chrome 會自然回傳運算式產生的結果。string()、count() 及 boolean() 等函式因此會產生純量結果,而不會被強制轉成節點清單。

結果類型可見輸出檢查重點
節點集比對到的節點會依編號逐行顯示,並以可見方式序列化。每個預期節點都存在,且沒有多餘的預期外節點。
字串單一字串值。確切回傳的文字,包括適用時的空字串。
數字單一數值。數值函式或運算式產生的值。
布林值true 或 false 結果。受測條件是否依預期評估。
有效的空結果空字串或零節點集。這是成功的空結果,而非解析器或運算式失敗。

除錯時,這項差異很重要。布林結果為 false、有效的零節點集,以及無效運算式是不同的結果。請先閱讀顯示的類型,再判斷選取器本身是否有誤。

先解決命名空間,再追查零比對

在 XPath 1.0 中,沒有前綴的名稱會選取不屬於任何命名空間的元素。預設 XML 命名空間不會讓沒有前綴的 XPath 名稱比對該命名空間的項目。只要涉及具命名空間的元素,就請在 XML 與運算式中都使用明確的前綴。

  • XML: <catalog xmlns:b="urn:books"><b:book id="101"><b:title>Browser Testing</b:title></b:book></catalog>
  • XPath: /catalog/b:book/b:title

命名空間前綴會依 XML 文件元素上可見的宣告解析。保留的 xml 前綴會對應至其標準命名空間。如果同一份 XML 改用 xmlns="urn:books",則像 /catalog/book 這樣的運算式不會比對到預設命名空間中的元素。請在 XML 中為該命名空間指定明確前綴,並在運算式中使用該前綴。未宣告的運算式前綴會產生運算式錯誤,因此請一併檢查拼字與根元素宣告。

辨識錯誤與明確限制

此工具會區分格式錯誤的來源、無效運算式、成功的空結果,以及超出其限制的工作。

情況工具行為後續動作
格式錯誤的 XMLparsererror 結果會視為失敗,且不會繼續進行 XPath 評估。修正標籤不相符或其他 XML 語法錯誤。
超過 500,000 個字元的 XML輸入內容超過支援的大小限制。將測試資料縮減為具代表性的範例。
超過 2,000 個字元的運算式運算式超過支援的長度限制。縮短運算式,或分開測試各部分。
超過 500 個比對節點執行失敗並要求使用更精確的運算式,而不會將不完整的前段內容呈現為完整結果。加入更特定的路徑或更嚴格的內容限制。
超過 1,000,000 個顯示結果字元超過輸出上限,工具會因此失敗,而不會截斷結果。縮小所選節點或回傳文字的範圍。
廣泛的後代搜尋以廣泛後代搜尋開頭的運算式,在大型文件上可能耗費大量資源。實際可行時,請使用特定的絕對路徑或更狹窄的內容範圍。

瀏覽器的錯誤訊息文字可能不同,因此介面會加上穩定的 XPath 錯誤前綴,同時保留底層診斷訊息。此工作流程也不會依 XSD 或 DTD 進行驗證。即使某個節點完全比對成功,文件仍可能無法通過其他地方執行的結構描述或業務規則檢查。

處理過程完全在本機進行,但 XML 仍會顯示在你的螢幕上,也可能經由剪貼簿傳送。請採取與使用其他開發者工具時相同的本機螢幕與剪貼簿防範措施。此測試器不會擷取遠端文件、跟隨連結、執行指令碼、插入所選標記、改變來源或儲存工作歷程。

在目的地執行環境中確認選取器

瀏覽器實作的是 XPath 1.0,而伺服器程式庫可能支援其他版本或採用不同的命名空間政策。請將瀏覽器結果視為其中一個驗證階段,而非最終部署保證。

  1. 確認目標方言。XPath 2.0、XPath 3.1、XQuery、XSLT、CSS 選取器與 JSONPath 都不在此工具的範圍內。較新版本的序列、對應、陣列、具類型的值、正規表示式功能、函式及運算子均無法使用。
  2. 使用相同的運算式。複製受測 XPath 時,不要變更其路徑、述詞、前綴或函式呼叫。
  3. 檢查目標環境中的命名空間繫結。請確保目標文件提供與運算式相同的前綴對命名空間對應。
  4. 針對具代表性的回應執行測試。請同時測試已知可比對的情況,以及應該不傳回任何節點的情況。
  5. 進行個別驗證。確認 XPath 本身已選取預期節點後,再確認任何結構描述、資料或業務需求。