DOM4j学习

1.DOM4J是什么
是一种XML文档解析规范,底层也需要DOM4J解析器实现与支持
2.DOM4J结构
Node,Document,Element
3.DOM4J获取Document对象
a.先获取SAXReader对象

  SAXReader reader = new SAXReader();

b.再来加载XML文档

Document doc = reader.read("src/students.xml");

4.保存Document对象
使用XMLWriter对象的write()方法来完成,以什么形式保存

OutputFormat format = new OutputFormat("\t", true);
		format.setEncoding("UTF-8");
		XMLWriter writer = new XMLWriter(new FileWriter(xmlName), format);
		writer.write(doc);
		writer.close();

5.练习DOM4J

1.创建DOM4JUtils

public class Dom4jUtils {
	public  static String PATH = "src/p1.xml";

	// 获得解析器
	public static Document getDocument(String path) throws DocumentException {
		SAXReader sr = new SAXReader();
		Document doc = sr.read(path);
		return doc;
	}

	// 回写
	public static void xmlwirter(String path, Document doc) throws IOException {
		OutputFormat format = OutputFormat.createPrettyPrint();
		XMLWriter xmlwirter = new XMLWriter(new FileOutputStream(path),format);
		xmlwirter.write(doc);
		xmlwirter.close();
	}
}

2.Test

package pack;



import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.DocumentHandler;

public class Demo{
	public static void main(String[] args) throws Exception {
		//selectSin();
//		selectAll();
//		selectSecond();
//		addsex();
//		addNodeBefore();、
//		modifyNode();
//		removeNode();
//		gainid();
	}
	//获取id1的属性值
	public static void gainid(){
		Document document = Domutils.document(Domutils.PTHA);
		Element root = document.getRootElement();
		Element p1  = root.element("p1");
		String s = p1.attributeValue("id1");
	    System.out.print(s);
	}
	//删除节点
	public static void removeNode(){
		Document document = Domutils.document(Domutils.PTHA);
		Element root = document.getRootElement();
		Element p1  = root.element("p1");
		Element  school = p1.element("school");
		p1.remove(school);
		Domutils.XMLWrite(Domutils.PTHA, document);
	}
	//修改节点的值
	public static void modifyNode(){
		Document document = Domutils.document("src/1.xml");
		Element root = document.getRootElement();
		Element p1  = root.element("p1");
		Element age = p1.element("age");
		age.setText("400");
		Domutils.XMLWrite("src/1.xml", document);
	}
	//在特定的位置插入一个节点
	public static void addNodeBefore() throws DocumentException, Exception, FileNotFoundException{
         Document document = Domutils.document("src/1.xml");
		 Element root = document.getRootElement();
		 List<Element> list = root.elements("p1");
		 Element  shcool =  DocumentHelper.createElement("school");
		 shcool.setText("bvn");
		 list.add(1,shcool);
		 
		 //回写
		Domutils.XMLWrite("src/1.xml", document);
		 
	}
	public static void addsex() throws Exception{
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/1.xml");
		Element root = document.getRootElement();
		Element p1 = root.element("p1");
		Element sex = p1.addElement("sex");
		sex.setText("nvn");
		//回写
		OutputFormat  format = OutputFormat.createPrettyPrint();
		XMLWriter   xmlwrite  = new XMLWriter(new FileOutputStream("src/1.xml"),format);
		xmlwrite.write(document);
		xmlwrite.close();
		
		
		
		
	}
	public static void selectSecond() throws Exception{
		/*
		 * 1、创建解析器
		 * 2、得到document
		 * 3、得到根节点
		 * 
		 *  4、得到所有的p1
		 *  5、遍历得到第二个p1
		 *  6、得到第二个p1下面的name
		 *  7、得到name的值
		 * */
		SAXReader reafer = new SAXReader();
		//得到document 
		Document document = reafer.read("src/1.xml");
		Element  root = document.getRootElement();
		List<Element>  list   = root.elements("p1");
		Element p1 = list.get(1);
		Element name2 = p1.element("name");
		String s = name2.getText();
		System.out.print(s);
	}
	//获取得到一个name元素里面的值
	public static void selectSin() throws Exception{
//		1.创建解析器;
//		2.得到document
//		3.得到根节点
//        4.得到第一个p1元素
//        5.得到p1下面的name元素
//        6.得到name元素里面的值
		
//		  创建解析器
		SAXReader reafer = new SAXReader();
		//得到document 
		Document document = reafer.read("src/1.xml");
		Element  root = document.getRootElement();
		Element  p1   = root.element("p1");
		Element  name  = p1.element("name");
		String   text1    = name.getText();
		System.out.print(text1);
	}
	//遍历所有的name值
public static void selectAll() throws Exception{
	    SAXReader reader = new SAXReader();
	    Document document = reader.read("src/1.xml");
	    Element   root = document.getRootElement();
	    List<Element> list= root.elements("p1");
	    for(Element element: list){
	    Element name1 =element.element("name");
	    String name = name1.getText();
	    System.out.print(name);
	    }
	
 }
}

3.Xpath

public class TestDom4jXpath {
	@Test
	public void fun() throws DocumentException {
//		SelectName();
		selectAllName();
	}

	// 使用Xpath获取name元素
	public static void SelectName() throws DocumentException {
		Document doc = Dom4jUtils.getDocument(Dom4jUtils.PATH);
		// 直接使用selectSingleNode方法实现
		Node el = doc.selectSingleNode("//p1[@id1='aaaa']/age");
		String tx = el.getText();
		System.out.println(tx);
	}
	
	public static void selectAllName() throws DocumentException{
		Document doc = Dom4jUtils.getDocument(Dom4jUtils.PATH);
		List<Node> nodes = doc.selectNodes("//age");
		for(Node node : nodes ){
			String tx = node.getText();
			System.out.println(tx);
		}
	}
}

p1.xml

<?xml version="1.0" encoding="UTF-8"?>

<person> 
  <p1 id1="aaaa"> 
    <age>200</age>  
    <sex>nan</sex>  
    <sex>nan</sex>  
    <sex/>  
    <school>city</school>  
    <sex>nv</sex>  
    <school>nv</school>  
    <sex>nan</sex> 
  </p1>  
  <p1> 
    <name>lisi</name>  
    <age>30</age> 
  </p1> 
</person>

1.创建解析器
xml文档在内存中的存放形式为Document
2.读取xml的存放路径

文档的解析
1.获取元素
1.获取document
2.获取根节点getRootElement
3.获取根节点下面的元素Element;
4.获取该元素的属性attributeValue;

制作Dom4jUtils小工具

	// selectName();
               获取元素的属性:
                   1.获取根节点
                   2.获取p1元素
                   3.试用AttributeValue()获取元素名称
	// delSch();
                   1.获取根节点
                   2.获取父节点
                   3.利用父节点的remove删除
	// setAge();
                   1.获取根节点
                   2.获取父节点
                   3.获取修改元素
                   4.修改元素setText; 
	// addElement();添加元素在末尾
                   1.
                   2.
                   3.DocumentHeader.creatElement()
                     添加文本 
                   4.获取父节点元素下所有元素
                   5.使用add(特定位置,创建的元素)

// addP1();在p1末尾添加元素
1.
2.
3.获取父节点
4.addElement()
// selectName2();
1.
2.
3.获取所有P1
4.p1.get(1)
5. p1.get(1) .Element(“name”)
// selectAllName();
1.
2.
3.遍历所有p1
4.获取name元素
5.获取文本

  • 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:jilongliang@sina.com *@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、付费专栏及课程。

余额充值