mikey.tsu 发表于 2013-2-3 13:45:43

Java递归遍历XML所有元素

import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.tree.DefaultAttribute;/** * Java递归遍历XML所有元素 ** @authorAdministrator * @version[版本号, Apr 13, 2010] * @see[相关类/方法] * @since[产品/模块版本] */public class XmlParser{    // private static Map xmlmap = new HashMap();   //存储xml元素信息的容器   private static ArrayList<Leaf> elemList = new ArrayList<Leaf>();      public static void main(String args[])      throws DocumentException    {      XmlParser test = new XmlParser();      String path = "C:/a.xml";      // 读取XML文件      SAXReader reader = new SAXReader();      Document doc = reader.read(path);      // 获取XML根元素      Element root = doc.getRootElement();      test.getElementList(root);      String x = test.getListString(elemList);      System.out.println("-----------解析结果------------\n" + x);    }      /**      * 获取节点所有属性值   * <功能详细描述>   * @param element   * @return   * @see [类、类#方法、类#成员]   */    public String getNoteAttribute(Element element)    {      String xattribute = "";      DefaultAttribute e = null;      List list = element.attributes();      for (int i = 0; i < list.size(); i++)      {            e = (DefaultAttribute)list.get(i);            //System.out.println("name = " + e.getName() + ", value = " + e.getText());            xattribute += " ";      }      return xattribute;    }      /**      * 递归遍历方法      * <功能详细描述>   * @param element   * @see [类、类#方法、类#成员]   */    public void getElementList(Element element)    {      List elements = element.elements();      // 没有子元素         if (elements.isEmpty())      {            String xpath = element.getPath();            String value = element.getTextTrim();            elemList.add(new Leaf(getNoteAttribute(element), xpath, value));      }      else      {            // 有子元素            Iterator it = elements.iterator();            while (it.hasNext())            {                Element elem = (Element)it.next();                // 递归遍历               getElementList(elem);            }      }    }      public String getListString(List elemList)    {      StringBuffer sb = new StringBuffer();      for (Iterator it = elemList.iterator(); it.hasNext();)      {            Leaf leaf = (Leaf)it.next();            sb.append("xpath: " + leaf.getXpath()).append(", value: ").append(leaf.getValue());            if (!"".equals(leaf.getXattribute()))            {                sb.append(", Attribute: ").append(leaf.getXattribute());            }            sb.append("\n");      }      return sb.toString();    }}/** * xml节点数据结构 */class Leaf{    // 节点属性    private String xattribute;      // 节点PATH    private String xpath;      // 节点值    private String value;      public Leaf(String xattribute, String xpath, String value)    {      this.xattribute = xattribute;      this.xpath = xpath;      this.value = value;    }      public String getXpath()    {      return xpath;    }      public void setXpath(String xpath)    {      this.xpath = xpath;    }      public String getValue()    {      return value;    }      public void setValue(String value)    {      this.value = value;    }      public String getXattribute()    {      return xattribute;    }      public void setXattribute(String xattribute)    {      this.xattribute = xattribute;    }} 
页: [1]
查看完整版本: Java递归遍历XML所有元素