如题,注意:并不一定只有一层循环,不知道节点下面有没有子节点,也不知道子节点下面还有没有子节点...? 谢谢,重金有赏!
------解决方案--------------------------------------------------------
- Java code
// 用递归方法遍历DOM树 public void GetElement(NodeList nodelist) { Node cnode; int i; String str; int len; if (nodelist.getLength() == 0) { return; } for (i = 0; i < nodelist.getLength(); i++) { cnode = nodelist.item(i); if (cnode.getNodeType() == 1) { if(cnode.hasChildNodes()){ NodeList childlist = cnode.getChildNodes(); if(childlist.item(i).getNodeType()==Node.ENTITY_NODE){ String stringLetter=cnode.getNodeName().substring(0, 1).toUpperCase(); String setName="set"+ stringLetter + cnode.getNodeName().substring(1);// Method setMethod=fs.getMethod(setName, cnode.getNodeType()); } } GetElement(cnode.getChildNodes()); } else if (cnode.getNodeType() == 3) { str = cnode.getNodeValue(); len = str.length(); if (len > 1){ String fieldName = cnode.getParentNode().getNodeName(); String stringLetter=fieldName.substring(0, 1).toUpperCase(); String setName="set"+stringLetter+fieldName.substring(1); Field[] fields1=head.getDeclaredFields(); Field[] fields2=msg.getDeclaredFields(); for (int j = 0; j < fields1.length; j++) { if(fields1[j].getName()==fieldName){ try { Method setMethod = head.getMethod(setName, fields1[j].getType().getClass()); setMethod.invoke(head, str); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } for (int j = 0; j < fields2.length; j++) { if(fields2[j].getName()==fieldName){ try { Method setMethod = msg.getMethod(setName, fields2[j].getType().getClass()); setMethod.invoke(msg, str); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } } // 遍历所提供的DOM文档. public void ParseDom(Document document) { NodeList nodelist; Element element = document.getDocumentElement(); // System.out.println("----" + element.getNodeName()); nodelist = element.getChildNodes(); GetElement(nodelist); }