我正在尝试在IE9中进行一些xpath查询,其中有一些成功,但肯定只是尝试而且我无法清楚地知道可以工作什么不可以。
我想做两件事:
第一点有效,使用此代码:
doc.setProperty( "SelectionLanguage", "XPath" );
doc.setProperty( "SelectionNamespaces", xpathNsString );
svg = cloneSVGNode( doc.selectSingleNode( '//graphic/svg:svg' ) );
其中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工作,这对“plain xml”起作用。然而,通过浏览lib的源代码,我可以看到以下策略(我对此并不完全确定,但我认为总而言之就是这样):
那么,当xml和dom节点可能转换为xml时,是否有可能使IE9对DOM进行命名空间的xpath查询?
问候菲律宾
修改
我继续尝试,最后我可以成功,不知何故,代码安静一团糟,但它提供了结果。所以我现在可以说:“答案是肯定的,这是可能的。”。它仍然需要一些测试,但整体方法是:
... DONE
如果有人被迫,我可以张贴一些代码......
答案 0 :(得分:0)
因此,基于我的编辑,我调整了this脚本,以便命名空间工作并添加一些getter来使API更接近标准。可以看到测试页here。它适用于我的目的,但有其缺点,只是因为它是一种黑客,所以我只在检测到IE时才包含脚本。
<强>的问题:强>
现在我将结束关于客户端上xpath使用的研究,并得出结论:
如果考虑在客户端使用xml和xpath的所有命名空间功能,则可以执行以下操作:
Content-type: application/xhtml+xml
标题,因此页面必须包含有效的xhtm,X-UA-Compatible: IE=9
标头,<meta http-equiv="X-UA-Compatible" content="IE=9" />
标记