使用dom4j解析处理html时,遇到一些麻烦的问题:
基中必须要使用XPath取得节点,有个命名空间的问题,需要如下处理:
HashMap<String, String> gm = new HashMap<String, String>();
gm.put("xmlns", "https://www.w3.org/1999/xhtml");
Document rootDoc = DocumentHelper.parseText(s);
XPath xpathTable = DocumentHelper
.createXPath("//xmlns:table[@class=\"tableList\"]");
xpathTable.setNamespaceURIs(gm);
List<Node> tables = xpathTable.selectNodes(rootDoc);
现在取出来是Node对象(比如一个table),再往下取时,再用node1.selectNodes会取不到东西,可能还是因为命名空间的麻烦问题,所以最好转为Element,就很容易了,element1.elements("tr"),就可以方便地循环了,比较奇怪的是转换为Element的方法居然是强转-_-!
Element table1 = (Element) tables.get(0); // 第一个表格
由此可以这样理解Node和Element,Node是节点,一个属性、一段文字、一个注释等都是节点,而Element是元素,是比较完整的一个xml的元素,即我们口头上说的xml“结点”(此处故意使用“结”字,以示与“节点”Node区别),呵呵……