Xpather不会在firefox 3.5上评估XPath,但在firefox 3.6上运行正常

时间:2011-05-30 07:56:34

标签: xpath xml-namespaces

我正在研究一个richface应用程序,并尝试使用firefox3.5上的xpather评估以下xpath。 XPather没有评估任何xpath虽然相同的xpath在firefox 3.6上运行得很好。 我正在测试的页面就像 -

<!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?

1 个答案:

答案 0 :(得分:1)

  

FF3.5上的简单xpath,如//input,它   不会返回任何结果。是   导致此问题的命名空间?

是。如果您查看文档,那么您在那里有一个默认的命名空间定义。

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:o="http://openfaces.org">

这意味着//input正在寻找没有命名空间的元素<input>,而您应该查找<input>命名空间中的http://www.w3.org/1999/xhtml。您需要定义该命名空间并将其绑定到前缀,然后在XPath中使用该前缀。比如//x:input