2014-04-30 75 views
0

我需要創建一個XPath查詢來選擇一個名稱包含空白字符的JCR節點。Xpath:空白編碼

例如:

但是,這會導致一個無效的查詢。

如何在XPath查詢中編碼空白區域?

+1

空間不是元素名稱是有效的字符。你能顯示數據嗎? – choroba

+0

那麼,事實上,我需要檢索一個JCR節點(不是一個XML節點) – fiddler

+0

它不是一個XML資源嗎?無論如何,你可以嘗試'/ jcr:root/{foo bar} /'或'/ jcr:root/foo%20bar /'或'/ jcr:root/foo bar /'但我懷疑它有幫助。 – CoDEmanX

回答

2

嘗試使用像這樣的XPath查詢:

/jcr:root/foo_x0020_bar/ 

JSR-170(JCR 1.0)規範定義的XPath如何可以被用來查詢一JCR庫中,並且即使JSR-283(或JCR 2.0)棄用的XPath作爲一種查詢語言,許多實現仍支持XPath以及其他查詢語言(包括功能更強大的JCR-SQL2)。

現在,關於在XPath中轉義字符的規則,JSR-170的狀態在Section 6.6.4.9以下:

元素的名稱和屬性(分別對應於節點和屬性)的XPath語句中必須對應於它們(理論上)在文檔視圖中出現的形式。這意味着名稱中的空格(和任何其他非XML字符)必須根據6.4.3轉義名稱中描述的規則進行編碼。

Section 6.4.3定義字符怎麼這麼在名稱轉義:

轉義字符是下劃線(「_」)。任何無效字符轉義爲_xHHHH_,其中HHHH是字符的四位十六進制UTF-16編碼。在生成轉義序列時,實現應該使用十六進制數字a-f的小寫字母。然而,在翻閱時,必須識別大寫和小寫字母十六進制字符。

雖然你沒有問這個問題,你可以輕鬆地做同樣的查詢在JCR-SQL2:

SELECT * FROM [nt:base] WHERE ISSAMENODE('/foo_x0020_bar')