最近在做Wap网站的项目,期间需要解析并更改xhtml文档,但在使用Node接口的selectNodes(String arg)时,发现当xml文档中包含默认命名空间时,查询回来的List的大小竟然是0.
经过一番查证,发现原来是Node接口的实现中没有对命名空间的限制和更改,因为实质上Dom4j中Node的selectNodes(String arg)方法使用的依然是XPath的瑟selectNodes(String arg)方法,但在XPath类中就有对命名空间的限制和更改,所以这里不能简单的直接使用Node接口的selectNodes(String arg)方法。
下边这个是我自己定义的selectNodes方法:
public List selectNodes(Document doc, String arg) {
Namespace ns = doc.getRootElement().getNamespace();
Map map = new HashMap();
map.put("xhtml", ns.getURI());
XPath xPath = doc.createXPath("//xhtml:" + arg.substring(2));
xPath.setNamespaceURIs(map);
return xPath.selectNodes(doc);
}