首先是要处理一个多层嵌套的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。需要注意的是部分包需要使用低版本,高版本会报错。