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

Chrome 式檢查的實際運作方式
Chrome DevTools 可以檢查即時 DOM,但 XPath 運算式必須依據實際面對的文件、命名空間內容及實作來判斷。XPath Tester 會將這些變數分開處理。它會在目前分頁中針對分離於頁面、置於記憶體內的 XML 文件進行評估,因此成功比對不會改變你正在檢查的頁面。
輸入內容會透過 DOMParser.parseFromString 解析。parsererror 文件會視為失敗,因此標籤不相符及其他格式錯誤的 XML 都會在 XPath 評估前停止。評估後,元素會序列化為可見輸出,屬性會使用明確的 @ 表示法,而文字與註解節點則會加上可見標籤。這些輸出都不會以標記形式插入即時 DOM。若要執行其他工作,也就是針對已在 Chrome 主控台中載入的 XML 文件執行 XPath,請使用 在 Chrome 主控台中針對任何 XML 檢查 XPath。這裡使用的分離測試資料方法,重點在於部署前進行可重複的輸入與具類型的檢查。
在 Chrome 中測試 XPath 選取器
請使用能代表你在正式環境中預期 XML 結構的小型測試資料。簡短且聚焦的範例,比大型文件更容易讓人找出語法與命名空間錯誤。
- 貼上具代表性的 XML 測試資料。來源必須是格式正確的 XML,最多可包含 500,000 個字元。請使用 XML 回應或事先準備好的測試資料,而非任意 HTML,因為輸入內容會解析為 application/xml。
- 明確宣告命名空間前綴。當運算式使用 b:book 或其他帶前綴的名稱時,請在文件元素上放置如 xmlns:b="urn:books" 的宣告。
- 輸入一個 XPath 1.0 運算式。運算式最多可包含 2,000 個字元。請從特定路徑開始,例如 /catalog/book/title、縮寫的絕對路徑,例如 //book/title,或函式呼叫,例如 count(//book)。
- 執行評估。瀏覽器會針對分離的 XML 文件評估運算式。如果 XML 無法解析,請先修正來源,再變更 XPath 運算式。
- 確認自然結果類型。輸出可能是節點集、字串、數字或布林值。這項差異有助於你判斷運算式是選取了節點,還是計算出純量值。
- 檢查確切的序列化比對結果。節點集結果會依編號逐行顯示。元素會以可見方式序列化,屬性會帶有明確的 @ 表示法,而文字與註解節點則會加上標籤。
- 執行正向及零比對檢查。請確認預期節點都有出現,而且刻意設為狹窄且不存在的路徑會產生有效的零節點結果,而不是錯誤。
- 在目的地執行環境中重新測試運算式。請在實際使用運算式的位置執行,例如自動化程式庫或伺服器端 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 中為該命名空間指定明確前綴,並在運算式中使用該前綴。未宣告的運算式前綴會產生運算式錯誤,因此請一併檢查拼字與根元素宣告。
辨識錯誤與明確限制
此工具會區分格式錯誤的來源、無效運算式、成功的空結果,以及超出其限制的工作。
| 情況 | 工具行為 | 後續動作 |
|---|---|---|
| 格式錯誤的 XML | parsererror 結果會視為失敗,且不會繼續進行 XPath 評估。 | 修正標籤不相符或其他 XML 語法錯誤。 |
| 超過 500,000 個字元的 XML | 輸入內容超過支援的大小限制。 | 將測試資料縮減為具代表性的範例。 |
| 超過 2,000 個字元的運算式 | 運算式超過支援的長度限制。 | 縮短運算式,或分開測試各部分。 |
| 超過 500 個比對節點 | 執行失敗並要求使用更精確的運算式,而不會將不完整的前段內容呈現為完整結果。 | 加入更特定的路徑或更嚴格的內容限制。 |
| 超過 1,000,000 個顯示結果字元 | 超過輸出上限,工具會因此失敗,而不會截斷結果。 | 縮小所選節點或回傳文字的範圍。 |
| 廣泛的後代搜尋 | 以廣泛後代搜尋開頭的運算式,在大型文件上可能耗費大量資源。 | 實際可行時,請使用特定的絕對路徑或更狹窄的內容範圍。 |
瀏覽器的錯誤訊息文字可能不同,因此介面會加上穩定的 XPath 錯誤前綴,同時保留底層診斷訊息。此工作流程也不會依 XSD 或 DTD 進行驗證。即使某個節點完全比對成功,文件仍可能無法通過其他地方執行的結構描述或業務規則檢查。
處理過程完全在本機進行,但 XML 仍會顯示在你的螢幕上,也可能經由剪貼簿傳送。請採取與使用其他開發者工具時相同的本機螢幕與剪貼簿防範措施。此測試器不會擷取遠端文件、跟隨連結、執行指令碼、插入所選標記、改變來源或儲存工作歷程。
在目的地執行環境中確認選取器
瀏覽器實作的是 XPath 1.0,而伺服器程式庫可能支援其他版本或採用不同的命名空間政策。請將瀏覽器結果視為其中一個驗證階段,而非最終部署保證。
- 確認目標方言。XPath 2.0、XPath 3.1、XQuery、XSLT、CSS 選取器與 JSONPath 都不在此工具的範圍內。較新版本的序列、對應、陣列、具類型的值、正規表示式功能、函式及運算子均無法使用。
- 使用相同的運算式。複製受測 XPath 時,不要變更其路徑、述詞、前綴或函式呼叫。
- 檢查目標環境中的命名空間繫結。請確保目標文件提供與運算式相同的前綴對命名空間對應。
- 針對具代表性的回應執行測試。請同時測試已知可比對的情況,以及應該不傳回任何節點的情況。
- 進行個別驗證。確認 XPath 本身已選取預期節點後,再確認任何結構描述、資料或業務需求。