jdom对xml的递归读取

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.util.Iterator;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class readXML {
 // 递归显示XML的树型结构
 private void display(Element e) {
  List list = e.getChildren();
  if (list.size() > 0) // 判断是否是叶子节点,是则显示,否则递归
  {
   System.out.print("Node:" + e.getName());
   if (e.getAttributeValue("" + e.getName()) != null) {
    System.out
      .println("  " + e.getAttributeValue("" + e.getName()));
   } else
    System.out.println();
   for (Iterator iter = list.iterator(); iter.hasNext();) {
    System.out.print("\t");
    Element t = (Element) iter.next();
    display(t);
   }
  } else {
   System.out.print("Node:" + e.getName());
   System.out.println("\tValue:" + e.getTextTrim());
  }
 }

 public void test(File file) throws IOException {
  String xmlstr = "";
  if (!file.exists()) {
   System.out.println("file not exist!");
   return;
  }
  FileInputStream fis = new FileInputStream(file);
  // 本例的xml文件是以utf-8的格式存储的,故这里以utf-8读入
  InputStreamReader reader = new InputStreamReader(fis, "utf-8");
  char[] arr = new char[1024];
  int len = 0;
  while ((len = reader.read(arr, 0, 1024)) > 0) {
   xmlstr += new String(arr, 0, len).trim();
  }

  SAXBuilder builder = new SAXBuilder();
  Document doc = null;
  Reader in = new StringReader(xmlstr);
  // 初始化Dom
  try {
   doc = builder.build(in);
  } catch (JDOMException e) {
   e.printStackTrace();
  }
  // 获得根节点
  Element root = doc.getRootElement();
  // 注意此处取出的是root节点下面的一层的Element集合
  List ls = root.getChildren();
  for (Iterator iter = ls.iterator(); iter.hasNext();) {
   Element el = (Element) iter.next();
   display(el);
  }
 }

 public static void main(String[] args) {
  File input = new File("result.xml");
  readXML obj = new readXML();
  try {
   obj.test(input);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

 

 

你可能感兴趣的:(java,xml)