2011-05-25 86 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?