2011-05-25 53 views
2

我想通過嵌入在html中的svg運行xpath-expression。我只是無法弄清楚如何設置參數。我想要找到具有來自給定名稱空間的任意屬性的元素。我使用以下xpath表達式:在javascript中運行XPath表達式SVG內容使用javascript

var xpathexp = "//*[@*[namespace-uri()='"+this.typo7namespace+"']]"; 

我測試了這個表達式,它按預期工作。 這是找到的結果集代碼:

var result = this.svgdocument.contentDocument.evaluate(xpathexp, this.svgdocument.documentElement, null, XPathResult.ANY_TYPE, null); 

有誰告訴我,或張貼一個鏈接到一個教程,如何應對namspaces,命名空間解析器?

問候......

回答

1

下面是關於使用XPath Mozilla的教程: https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript

這裏有一個關於編寫自定義命名空間解析器: https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver

我發現這些接口是相當笨重,雖然,所以我寫了一個抽象層,它將採用xpath字符串和上下文節點,並返回一個常規的js數組。它在瀏覽器內部工作,並在Mozilla Rhino下嵌入到Java中: https://svn.apache.org/repos/asf/commons/sandbox/gsoc/2010/scxml-js/trunk/src/javascript/scxml/cgf/util/xpath.js

以上所有應用程序都適用於除IE6-9之外的所有瀏覽器。

IE6-8本身不支持SVG,所以這對你的問題應該不太重要。爲了完整,不過,這裏有一個很好的文章描述早期IE8 XPath支持,其中包括解析名稱空間支持: http://www.nczonline.net/blog/2009/04/04/xpath-in-javascript-part-3/

顯然,IE9還沒有包括在瀏覽器中,這是更成問題的XPath支持,因爲它本地支持SVG。這裏最好的方法可能是使用ActiveX來處理MSXML APIs: IE9 selectSingleNode missing from beta, how to overcome this in JavaScript?