2012-09-19 49 views
0

我想在IE9中做一些XPath查詢,有一些排序成功,但肯定它只是試圖,我無法弄清楚什麼可以工作,什麼不是。xpath在IE9 - 一般問題

我想要做的兩件事情:從加載XML中的自定義空間

  1. 查詢元素
  2. 從聯SVG
  3. 查詢元素具有自定義命名空間屬性

點一個作品,用這種代碼:

其中doc是加載的XML的引用,xpathNsString是:

"xmlns=\"http://www.w3.org/1999/xhtml\" " + 
"xmlns:svg=\"http://www.w3.org/2000/svg\" "+ 
"xmlns:dc=\"http://purl.org/dc/elements/1.1/\" "+ 
"xmlns:cc=\"http://creativecommons.org/ns#\" "+ 
"xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" "+ 
"xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\" "+ 
"xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" "+ 
"xmlns:mine=\"http://www.mine.org\" "+ 
"xmlns:html=\"http://www.w3.org/1999/xhtml\""; 

cloneSVGNode和哪些克隆整個結果,使我可以將其追加到DOM的函數 - 的作品。

後來在代碼中,我想查詢一些(目前在DOM)SVG元素,使用這樣的查詢:

//svg:g[@mine:my-name="my-value"] 

但這不起作用。我讀過IE不支持DOM元素上的xpath查詢,但this stackoverflow question中描述的方式似乎有辦法做到這一點。於是我抓住了問題答案(http://sourceforge.net/projects/html-xpath/)中提到的框架版本並做了一些測試。 因爲我能夠得到一些html元素,但它拒絕爲名稱空間和svg工作,對「純xml」起作用。然而,通過在LIB的源代碼一眼,我可以看到下面的策略(我不能完全肯定,但我認爲所有的一切就是這個樣子):

  1. 克隆節點到新的XML文檔
  2. 查詢的XPath
  3. 返回真實節點

這樣的對應節點,是有可能使IE9使DOM的名稱空間的XPath查詢,當它有可能在XML和DOM節點轉換爲XML ?

問候菲利普

編輯:

我去嘗試,最後我能成功,不知何故,該代碼是安靜的一個爛攤子,但它帶來的結果。所以我現在可以說:「答案是肯定的,這是可能的。」。它仍然需要一些測試,但總體做法是:

  1. 新建一個空的XML文檔
  2. 設置適當的命名空間屬性(上述)!通過新的XML文檔創建新元素的重要
  3. 步行遞歸通過上下文文檔的樹,克隆的所有元素,
  4. 從而:從上下文文檔的元素生成唯一的ID,並將其分配給克隆的元素,到上下文文檔的元素,如果它沒有。將插入包含「原始」和「克隆」元素的對象,並將其放在由ID所鍵入的散列表中。
  5. 用xpath查詢新文檔
  6. 檢索結果,獲取id並從地圖中獲取原始元素。
  7. 我決定從原本沒有的元素中刪除所有的id。

DONE ...

如果一個人intressed我可以張貼一些代碼...

回答

0

所以,根據我的編輯,我調整/修補this腳本,這樣的命名空間工作,並增加了一些getter的API將更接近標準。測試頁面可以看到here。它適用於我的目的,但有其缺點,僅僅因爲它是一種黑客攻擊,所以只有在檢測到IE時才包含腳本。

問題:

  • DOM是填充有ID來完成上述的問題的步驟6中,
  • 一個 'onpropertychange' 監聽器被附連到在DOM每個元素,
  • 在ie中的性能高達20倍慢,
  • 奇怪的是,並非所有的命名空間項都是由IE發現的,
  • ...

現在我將結束我的研究有關XPath的使用在客戶方,並得出結論是:

如果考慮到使用XML和XPath對客戶方的所有命名空間功能,它可以工作,如果下面的事情完成:

  • 的網站必須有Content-type: application/xhtml+xml頭傳遞,所以頁面必須包括有效xhtm的,
  • 還必須有一個X-UA-Compatible: IE=9頭與<meta http-equiv="X-UA-Compatible" content="IE=9" />標籤,
  • 命名空間必須提前申報,測試頁上和補丁腳本,這是與命名空間解析器完成,
  • 一個應該檢查一下IE真的找到所有需要的查詢元素纔去真正的生產力和
  • 我們應該考慮IE瀏覽器xpath查詢安靜緩慢,因此廣泛使用它們或使用IE瀏覽器可能不是好主意,但這是另一個問題。