2010-01-15 30 views
3

我不知道到底是爲什麼XPath表達式:HTML 4.0實體XPath查詢

//h3[text()='Foo › Bar'] 

不匹配:

<h3>Foo &rsaquo; Bar</h3> 

確實似乎對不對?我如何查詢該標記?

+0

這應該相匹配。您使用哪種語言的XML庫? – Welbog 2010-01-15 20:26:18

回答

4

XPath不定義任何特殊轉義序列。在XSLT中使用XPath(例如,在XSLT文檔的元素屬性中)時,轉義序列由讀取樣式表的XML處理器處理。如果您通過庫在非XML上下文(例如,來自Java或C#或其他語言)中使用XPath,並且您的XPath查詢是該語言中的字符串字面值,則除了語言本身之外,不會執行任何轉義處理通常會。

如果這是C#或Java,這應該工作:

String xpath = "//h3[text()='Foo \u8250 Bar']"; 
... 

作爲一個側面說明,它不會在XSLT工作,要麼,作爲XSLT使用XML,它並沒有定義字符實體&rsaquo; - 它只定義&lt;&gt;&quot;&apos;&amp;。您必須使用&#x8250;,或者在XSLT樣式表的DOCTYPE聲明中自己定義字符實體。

1

XPath specification

的XPath運行在一個XML文檔的抽象,邏輯結構,而不是它的表面語法

...所以,除非你正在使用的查詢中(而不是以「查詢」)解析該實體的語言(也許XSLT帶有包含實體的DTD(如果可能的話,我離XSLT專家很遠)),但我不希望它起作用。

使用文字字符或任何語言你正在使用XPath從公認的轉義序列。