2013-12-19 53 views
1

簡短問題:是選擇器API是否適合處理XML文檔?隨着「爲什麼我問:」在XML文檔中使用選擇器API

較長的問題...
我在做一些舊代碼,使用客戶端的生成的XML和XPath弄成的進步是交叉瀏覽器在IE(10+)以及IE7(以及Chrome,Firefox等等)的更高版本上很開心。

現在有variousquestions圍繞XPath在IE中的支持以及它似乎不再被照顧(沒有evaluate(),沒有SelectNodes())。據稱some classes have been whitelisted,但一些測試似乎暗示這是不可靠的,當在IE10中啓用ActiveX過濾。

我玩過邪惡的好xpath,但我遇到了一些XPath形式的問題。另外,如果IE永遠不會再有XPath支持,我寧願不要再依賴外部庫,而是找到下一個「最好」的東西來代替。

有人指出,the selector API is now the recommended choice取而代之。但是我遇到的問題是,它主要看起來是一個HTML選擇API(大多數情況下它是從CSS開始的,因此它有特殊的類和ID屬性的情況 - 可能還有其他的HTML-isms我還沒有看到)。

因此,處理XML文檔的選擇器API是否合理?鑑於IE缺乏支持,答案可能是「是」,但我看不出有什麼權威性的,給出明確建議(或反推薦)的東西。

回答

2

當然是。儘管CSS的確是爲HTML的伴侶而設計的,但它也被設計成文檔語言不可知的,HTML-isms與一般規則分開定義(雖然仍然兼容),從CSS選擇器派生的選擇器標準也是如此句法。

Selectors standard,在其上選擇器API是基於,開始正是如此:

選擇器有一些符合對在樹元素圖案,並且如這樣的形式中的幾個技術中的一種可以被用來選擇XML文檔中的節點。選擇器已針對HTML和XML進行了優化,旨在用於關鍵性能的代碼。

實現可以使用適當的解析器從HTML或XML構建DOM樹,然後可以使用選擇器查詢。您不應該使用選擇器來匹配XML元素。請注意,雖然HTML和XML實際上共享ID和類語義(例如,您可以在XSD中定義ID和IDREF屬性),但是如果Selectors API實現知道如何使用ID和類選擇器,則只能使用ID和類選擇器對其進行匹配XML的特定風格定義了這些語義。由於您使用的瀏覽器是瀏覽器,因此它有可能是唯一可以理解的XML風格,如SVG和MathML等廣泛採用的Web標準,而不是您內部的XML風格。儘管如此,您仍然擁有基本的類型選擇器,屬性選擇器,結構僞類和組合器,它們應該足夠滿足您的需求。

大部分你最終會運行到可能在於選擇語法本身,儘管其中的一些限制正被在Selectors level 4Selectors API level 2整流,與主題的指標,:matches()的侷限性,擴展:not():nth-match():nth-last-match() ,和:scope等等。

+0

你知道嗎,即使我對選擇器規格進行了快速掃描,我完全錯過了該段。感謝讓我看起來很愚蠢:-) –