使用JDOM解析xml

首先要导入第三方jar包:  jdom.jar
package my.yaner;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Properties;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class Utils {

	/**解析一个xml文件, 生成JDOM模型*/
	public static Document loadDOM(InputStream is) throws Exception {
		SAXBuilder sb = new SAXBuilder();
		sb.setValidation(false);
		Document doc = sb.build(is);
		return doc;
	}
	
	/**解析一个xml文件,生成JDOM模型*/
	public static Document loadDOM(File file) throws Exception {
		SAXBuilder sb = new SAXBuilder();
		sb.setValidation(false);
		Document doc = sb.build(file);
		return doc;
	}
	
	/**载入数据1. */
	public void load(File dir) throws Exception {
		//载入配置
		Properties config = new Properties();
		Document configDoc = loadDOM(new File(dir, "config.xml"));
		List list = configDoc.getRootElement().getChildren();
		for(int i = 0; i < list.size(); i++) {
			if(list.get(i) instanceof Element){
				Element elem = (Element) list.get(i);
				String configName = elem.getName();
				String configValue = elem.getTextTrim();
				config.setProperty(configName, configValue);
			}
		}
	}
	
	/**载入数据2. */
	public void loadResourceVersions() throws Exception {
		File baseDir = new File("F:/dbtest");
        Document doc = Utils.loadDOM(new File(baseDir, "fileversion.xml"));
        List list = doc.getRootElement().getChildren("file");
        Hashtable<String, Integer> ret = new Hashtable<String, Integer>();
        for (Object obj : list) {
            Element elem = (Element)obj;
            String fileName = elem.getAttributeValue("path");
            int fileVersion = Integer.parseInt(elem.getAttributeValue("version"));
            ret.put(fileName, fileVersion);
        }
    }
	
	 /** 把一个JDOM模型保存到XML文件中 */
	 public static void saveDOM(Document doc, File file, boolean addSpace) throws Exception{
	        FileOutputStream fos = null;
	        String encoding = System.getProperty("pip_xml_encoding");
	        if (encoding == null) {
	        	encoding = "GBK";
	        }
	        try{
	            XMLOutputter out;
	            if (!addSpace) {
	            	// 删除所有无用的空格
	            	ArrayList stack = new ArrayList();
	            	stack.add(doc.getRootElement());
	            	while (stack.size() > 0) {
	            		Object obj = stack.remove(0);
	            		if (obj instanceof Element) {
	            			Element element = (Element)obj;
	            			List list = element.getMixedContent();
	            			for (int i = 0; i < list.size(); i++) {
	            				Object child = list.get(i);
	            				if (child instanceof String && ((String)child).trim().isEmpty()) {
	            					list.remove(i);
	            					i--;
	            				} else if (child instanceof Element) {
	            					stack.add(child);
	            				}
	            			}
	            		}
	            	}
	            }
	            out = new XMLOutputter("    ", true, encoding);
	            fos = new FileOutputStream(file);
	            BufferedOutputStream bos = new BufferedOutputStream(fos);
	            out.output(doc, bos);
	            bos.flush();
	        }catch(Exception e){
	            throw e;
	        }finally{
	            if(fos != null){
	                try{
	                    fos.close();
	                }catch(IOException e){
	                }
	            }
	        }
	    }

	    /** 把一个JDOM模型保存到XML文件中 */
	    public static void saveDOM(Document doc, OutputStream os) throws Exception{
	        try{
	        	String encoding = System.getProperty("pip_xml_encoding");
	            if (encoding == null) {
	            	encoding = "GBK";
	            }
	            XMLOutputter out = new XMLOutputter("    ", true, encoding);
	            BufferedOutputStream bos = new BufferedOutputStream(os);
	            out.output(doc, bos);
	            bos.flush();
	        } catch(Exception e) {
	            throw e;
	        }
	    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dom4j,jsoup,jdom,w3cdom,xstream使用代码工程 package ivyy.taobao.com.dom4j; import ivyy.taobao.com.entity.Address; import ivyy.taobao.com.entity.Location; import ivyy.taobao.com.entity.Point; import ivyy.taobao.com.entity.Pois; import ivyy.taobao.com.utils.IoUtils; import ivyy.taobao.com.utils.UrlUtils; import ivyy.taobao.com.utils.Dom4jUtils; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.jsoup.Jsoup; import org.jsoup.select.Elements; /** *@Date:2015-1-6 *@Author:liangjilong *@Email:[email protected] *@Version:1.0 *@Description: */ @SuppressWarnings("all") public class Dom4jTest2 { public static void main(String[] args)throws Exception { //String filepath="D:/"+System.currentTimeMillis()+".xml"; String filepath="D:/test/map1.xml"; File f=new File(filepath); if(!f.exists()){ f.createNewFile(); } //List<Pois> list=getReaderXml("URL"); List<Pois> list=getReaderXml("FILE"); org.dom4j.Document doc=createAsXML(list); IoUtils.write(doc.asXML(),filepath); //格式化 Dom4jUtils.formatAsXml(doc); } /**** * 组装成一个xml * @param list * @return * @throws Exception */ private static org.dom4j.Document createAsXML(List<Pois> list) throws Exception{ org.dom4j.Document doc=DocumentHelper.createDocument(); Element root=doc.addElement("GeocoderSearchResponse");//根 root.addElement("status").setText("0");//status for (Iterator iterator = list.iterator(); iterator.hasNext();) { Pois pois = (Pois) iterator.next(); Element result=root.addElement("result");//result List<Location> listLoc=pois.getLocations(); Element location=result.addElement("location");//location for (Iterator iterator2 = listLoc.iterator(); iterator2.hasNext();) { Location locObj = (Location) iterator2.next(); location.addElement("lat").setText(locObj.getLat()+"");//lat location.addElement("lng").setText(locObj.getLng()+"");//lat result.addElement("formatted_address").setText(locObj.getFormattedAddress()+"");//formatted_address result.addElement("business").setText(locObj.getBusiness()+"");//business } List<Address> listAdd=pois.getAddress(); Element comp=result.addElement("addressComponent");//addressComponent for (Iterator iterator3 = listAdd.iterator(); iterator3.hasNext();) { Address address = (Address) iterator3.next(); comp.addElement("streetNumber").setText(address.getStreetNumber()+"");//streetNumber comp.addElement("street").setText(address.getStreet()+"");//street comp.addElement("district").setText(address.getDistrict()+"");//district comp.addElement("city").setText(address.getCity()+"");//city comp.addElement("province").setText(address.getProvince()+"");//province comp.addElement("cityCode").setText(address.getCityCode()+"");//cityCode } Element poi=result.addElement("pois").addElement("poi"); poi.addElement("addr").setText(pois.getAddr());//addr poi.addElement("distance").setText(pois.getDistance());//distance poi.addElement("name").setText(pois.getName());//name poi.addElement("poiType").setText(pois.getPoiType());//poiType poi.addElement("tel").setText(pois.getTel());//tel poi.addElement("zip").setText(pois.getZip());//zip List<Point> listPoint=pois.getPoints(); Element point=poi.addElement("point"); for (Iterator iterator4 = listPoint.iterator(); iterator4.hasNext();) { Point p = (Point) iterator4.next(); point.addElement("x").setText(p.getX()+""); point.addElement("y").setText(p.getY()+""); } } return doc; } /** * Dom4j(SAX)读取xml数据(解析) * @param params * @throws Exception */ private static List<Pois> getReaderXml(String flg) throws Exception{ String fromRead=Dom4jTest2.class.getClassLoader().getResource("xml/map1.xml").getPath(); List<Pois> list=new ArrayList<Pois>(); SAXReader saxReader = new SAXReader(); org.dom4j.Document document=null; //从api上面解析 if(flg.equals("URL")){ String url = UrlUtils.getBaiduMapUrl("你的key", "39.983424,116.322987", "xml"); document = saxReader.read(url); //从文件上面的xml解析 }else if(flg.equals("FILE")){ document = saxReader.read(new File(fromRead)); } Element resultEl = (Element)document.getRootElement().element("result"); Element poisEl=resultEl.element("pois");//pois节点 Element locationEl=resultEl.element("location");//location节点 Element addressEl=resultEl.element("addressComponent");//addressComponent节点 /*******从pois节点下面遍历多个poi节点*******/ for (Iterator<Element> poIter = poisEl.elementIterator("poi"); poIter.hasNext();) { Element element = (Element) poIter.next(); String addr = element.elementText("addr"); String distance = element.elementText("distance"); String name = element.elementText("name"); String poiType = element.elementText("poiType"); String tel =(element.elementText("tel")==""?"":element.elementText("tel")); String zip =(element.elementText("zip")==""?"":element.elementText("zip")); Pois poi=new Pois(); poi.setAddr(addr); poi.setDistance(distance); poi.setName(name); poi.setPoiType(poiType); poi.setTel(tel); poi.setZip(zip); List<Location> listLoc=new ArrayList<Location>(); /************Location***************************/ String business=resultEl.elementText("business"); String formatted_address=resultEl.elementText("formatted_address"); String lat = locationEl.elementText("lat"); String lng = locationEl.elementText("lng"); Location location=new Location(); location.setBusiness(business); location.setFormattedAddress(formatted_address); location.setLat(lat); location.setLng(lng); listLoc.add(location); poi.setLocations(listLoc); List<Address> listAddr=new ArrayList<Address>(); /************Address***************************/ Address address=new Address(); String streetNumber=(addressEl.elementText("streetNumber")==""?"":addressEl.elementText("streetNumber")); String street=(addressEl.elementText("street")==""?"":addressEl.elementText("street")); String district=(addressEl.elementText("district")==""?"":addressEl.elementText("district")); String city=(addressEl.elementText("city")==""?"":addressEl.elementText("city")); String province=(addressEl.elementText("province")==""?"":addressEl.elementText("province")); String direction=(addressEl.elementText("direction")==""?"":addressEl.elementText("direction")); String distancez=(addressEl.elementText("distance")==""?"":addressEl.elementText("distance")); address.setStreetNumber(streetNumber); address.setStreet(street); address.setCity(city); address.setDistrict(district); address.setDirection(direction); address.setDistance(distancez); address.setProvince(province); listAddr.add(address); poi.setAddress(listAddr); list.add(poi); } return list; } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值