问题描述
||
我正在开发一个richface应用程序,并尝试在firefox3.5上使用xpather评估以下xpath。虽然相同的xpath在firefox 3.6上运行得很好,但是XPather不会评估任何xpath。
我正在测试的页面就像-
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:o=\"http://openfaces.org\">
<head>
<script src=\"some source\" type=\"text/javascript\"></script>
<script src=\"some source\" type=\"text/javascript\"></script>
<link class=\"component\" href=\"some source\" rel=\"stylesheet\" type=\"text/css\" />
<link class=\"component\" href=\"some source\"
media=\"rich-extended-skinning\" rel=\"stylesheet\" type=\"text/css\" />
<link class=\"component\" href=\"some source\" rel=\"stylesheet\" type=\"text/css\" />
<script type=\"text/javascript\">window.RICH_FACES_EXTENDED_SKINNING_ON=true;</script>
<link type=\"text/css\" href=\"some source\" rel=\"stylesheet\"/>
<body class=\"Banner\" onresize=\"setTreePnlHeight()\" onload=\"loadApp();\">
<input type=\"hidden\" id=\"dsTreeScrollPos\" value=\"0\" />
<div id=\"a\" class=\"application\"><form id=\"form\" name=\"form\" method=\"post\" action=\"...\">
....
</body>
</html>
如果我使用xpather(v1.4.5)来评估FF3.5上的简单xpath(如//input
),则不会返回任何结果。命名空间是否会导致此问题?如何验证FF3.5上的xpath?
解决方法
FF3.5上的简单xpath,例如
//input
,它
不返回任何结果。是
命名空间导致此问题?
是。如果查看您的文档,则那里有一个默认的名称空间定义。
<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:o=\"http://openfaces.org\">
这意味着//input
正在寻找没有名称空间的元素<input>
,而您应寻找http://www.w3.org/1999/xhtml
名称空间中的<input>
。您需要定义该名称空间并将其绑定到前缀,然后在XPath中使用该前缀。像//x:input