首先是要处理一个多层嵌套的xml文档。

<?xml version="1.0" encoding="UTF-8"?>
<病案首页>
	<中医住院病案首页>
		<医疗机构>黄家湖医院</医疗机构>
		<病人基本信息>
			<姓名>张三</姓名>
			<新生儿>
				<月年龄></月年龄>
				<新生儿出生体重></新生儿出生体重>
				<新生儿入院体重></新生儿入院体重>
			</新生儿>
		</病人基本信息>
	</中医住院病案首页>

	<中医住院病案首页>
	</中医住院病案首页>

	<中医住院病案首页>
	</中医住院病案首页>
</病案首页>

java处理用的是dom4j,java代码如下:

import java.io.File;  
import java.util.ArrayList;
import java.util.HashMap;  
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;
/**
 *
 * @author guofan
 */
public class wtf {

    public void parseXml(){
        List<Map> xmlinfo = new ArrayList();
        try{  
            //创建SAXReader读取器,专门用于读取xml  
            SAXReader saxReader = new SAXReader();  
            //根据saxReader通过file对象来读取   
            Document document = saxReader.read(new File("D:/bingan.xml"));//必须指定文件的绝对路径  

            //获取根节点对象  
            Element rootElement = document.getRootElement();
            // 遍历每一个结点
            for (Iterator i = rootElement.elementIterator();i.hasNext();){
                // 每个主结点都放入一个map
                Map temp = new HashMap();
                Element element = (Element) i.next();
                // 结点的内容为0,即为空。为1,即不为空,如果大于1,则标明有下一层
                if(element.nodeCount()<=1){
                    // 把标签名和值放入map
                    temp.put(element.getName(),element.getText());
                }
                // 以下同理
                for(Iterator j = element.elementIterator();j.hasNext();){
                    Element elementa = (Element) j.next();
                    if(elementa.nodeCount()<=1){
                        temp.put(elementa.getName(),elementa.getText());
                    }
                    for(Iterator k = elementa.elementIterator();k.hasNext();){
                        Element elementb = (Element) k.next();
                        if(elementb.nodeCount()<=1){
                            temp.put(elementb.getName(),elementb.getText());
                        }
                        for(Iterator m = elementb.elementIterator();m.hasNext();){
                            Element elementc = (Element) m.next();
                            if(elementc.nodeCount()<=1){
                                temp.put(elementc.getName(),elementc.getText());
                            }
                        }
                    }
                }
                // 把结点的mao放入list
                xmlinfo.add(temp);
            }
        } catch ( DocumentException e) {
            e.printStackTrace();
        }
        for (Map u : xmlinfo) {
            //把map转化为json
            JSONObject  json = JSONObject .fromObject(u);
            //输出测试下
            System.out.println(json.toString());
        }
    }
   
    public static void main(String[] args){
        wtf demo = new wtf();
        demo.parseXml();
    }  
}

其中用到的json的依赖包有:json-lib,commons-beanutils,commons-collections,commons-lang,commons-logging,ezmorph。需要注意的是部分包需要使用低版本,高版本会报错。