dom4j生成与解析xml文件

哈喽,小编又来啦,今天和大家分享一下利用dom4j生成与解析xml文件技术,小编今天研究了一天了,终于有了点成果,话不多说,上代码~

生成xml文件 :

public String createXML() {
    Document doc = DocumentHelper.createDocument();   // 创建一个xml文档
    doc.addComment("这里是注释");   // 向xml文件中添加注释
    Element root = doc.addElement("phone");   // 创建一个名为phone的节点,因为是第一个创             建,所以是根节点,再通过doc创建一个则会报错。
    Element haha = root.addElement("brand");	
    Element stuEle = haha.addElement("oppo");   // 在root节点下创建一个名为oppo的节点
    stuEle.addAttribute("id", "oppo");   // 给oppo节点添加属性
    Element nameEle = stuEle.addElement("name");   // 给oppo节点添加一个子节点
    nameEle.setText("oppoFindX");   // 设置子节点的文本
    Element priceEle = stuEle.addElement("price");
    priceEle.setText("5499");
    Element publish = stuEle.addElement("publish");
    publish.setText("2018-05-11");
		
    Element stuEles = haha.addElement("vivo");
    stuEles.addAttribute("id", "vivo");
    Element nameEles = stuEles.addElement("name");
    nameEles.setText("vivoX21");
    Element priceEles = stuEles.addElement("price");
    priceEles.setText("4999");
    Element publishs = stuEles.addElement("publish");
    publishs.setText("2018-05-12");
		
    OutputFormat format = OutputFormat.createPrettyPrint();   // 用于格式化xml内容和设置头部标签
    format.setEncoding("utf-8");   // 设置xml文档的编码为utf-8
    try {
        // 创建一个输出流对象

        //此方法生成的xml文件用notepad++打开中文显示乱码
	//Writer out = new FileWriter("new.xml");

        //此方法生成的xml文件用notepad++打开无乱码
	FileOutputStream fos = new FileOutputStream(new File("E://new.xml"));
	XMLWriter writer = new XMLWriter(fos, format);   // 创建一个dom4j创建xml的对象
    	// 调用write方法将doc文档写到指定路径
	writer.write(doc);
	writer.close();
	System.out.print("生成XML文件成功");
    } catch (IOException e) {
	System.out.print("生成XML文件失败");
    	e.printStackTrace();
    }
	return "";
}

 调用方法:

public static void main(String[] args) {
    XmlHandler handler = new XmlHandler();
    handler.createXML();
}

 大家写到:Writer out = new FileWriter("new.xml");此处时,一定要注意,小编一开始用该方法确实可以生成文件,但是用  notepad++打开时中文乱码,用记事本打开无乱码(其他的没有测);用FileOutputStream fos = new FileOutputStream(new File("E://new.xml"));这个方法,均无问题,到此xml文件生成成功~效果如下:

标题

 

 解析xml:这里介绍两种,解析xml文件,解析xml字符串(其实原理相同)

1、 解析xml文件:

public String parseXML(){
    //SAXReader就是一个管道,用一个流的方式,把xml文件读出来
    SAXReader reader = new SAXReader();
    Document document;
    try {
        document = reader.read("E://new.xml");
        //获取根节点
	Element root = document.getRootElement();
        //创建集合,迭代器依次找出后面的节点(有几个节点就迭代几次,循环也是一样)
	List<Element> list = root.elements();
	Iterator<Element> it = list.iterator();
	while(it.hasNext()){
	    Element elm = it.next();
	    System.out.println(elm.getName() + ":");
	    Iterator<Element> its = elm.elementIterator();
            while(its.hasNext()){
		Element elme = its.next();
		System.out.print(elme.getName() + ":");
		Iterator<Element> itm = elme.elementIterator();
		while(itm.hasNext()){
		    Element e = itm.next();
		    System.out.print(e.getName() + ":" + e.getText() + " ");
		    }
	        }
		System.out.println();
	    }
	} catch (DocumentException e1) {
	    // TODO Auto-generated catch block
	    e1.printStackTrace();
    }
    return "";
}

调用方法:

public static void main(String[] args) {
    XmlHandler handler = new XmlHandler();
    handler.parseXML();
}

 解析效果如下:输出格式看个人~

2、解析xml字符串:和解析文件一样,你定义的xml字符串有几个节点就迭代几次

public String parseXML(){
    try {
        //定义字符串
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
	+ "<phone><brand>"
        + "<oppo><name>oppoFindX</name><price>5499</price>                                                <publish>2018-05-11</publish></oppo>"
	+ "<vivo><name>vivoX21</name><price>4999</price><publish>2018-05-12</publish></vivo>"
	+ "</brand></phone>";
	SAXReader reader = new SAXReader();
	Document document;
	try {
	    document = reader.read(new ByteArrayInputStream(xml.getBytes("UTF-8")));
	    Element root = document.getRootElement();
	    List<Element> list = root.elements();
	    Iterator<Element> it = list.iterator();
	    while(it.hasNext()){
	        Element elm = it.next();
		System.out.println(elm.getName() + ":");
		Iterator<Element> its = elm.elementIterator();
		while(its.hasNext()){
		    Element elme = its.next();
		    System.out.print(elme.getName() + ":");
		    Iterator<Element> itm = elme.elementIterator();
		    while(itm.hasNext()){
		        Element e = itm.next();
			System.out.print(e.getName() + ":" + e.getText() + " ");
		    }
		}
		System.out.println();
	    }
	} catch (UnsupportedEncodingException e1) {
	    // TODO Auto-generated catch block
	    e1.printStackTrace();
	}
    } catch (DocumentException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
    }
    return "";
}

调用方法:

public static void main(String[] args) {
    XmlHandler handler = new XmlHandler();
    handler.parseXML();
}

解析效果如下:输出格式看个人~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值