xml的生成和解析

本文深入探讨了使用DOM4J进行XML的生成和解析,对比了DOM与SAX解析方式,并展示了Java使用DOM4J创建、读取XML文件的方法。同时,文章还介绍了PHP使用SimpleXml进行XML生成与解析的简单示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml用的地方还是比较多的,使用场合比较多的是数据交换,xml的可读性虽然不错但就是体积大了点,json的话恰好相反体积小但是可读性比较差。这次准备分享的是xml的生成和解析,这次着重介绍DOM4J的使用

一  DOM,SAX解析xml的区别

1.DOM解析xml的时候会把整个xml载入内存中资源消耗有点大,可以随机读取,缺点是解析速度慢,只适合解析小型xml

2.SAX解析xml资源消耗不大,但是只能解析不能修改,适合读取复杂的xml,解析速度快

另外解析xml一般有SAX、DOM、JDOM、DOM4J这四种方法。

二.java使用dom4j解析和生成xml

1.生成xml字符串


package org.lxh;

import org.dom4j.*;

public class CreateXml {

	public static void main(String[] args) {
		Document doc=DocumentHelper.createDocument();
        Element root=doc.addElement("OrdersInfo");
        //第一个节点
        Element orderItem=root.addElement("order");
        orderItem.addAttribute("id", "1");
        Element orderNum=orderItem.addElement("orderNum");
        orderNum.addText("2014010501");
        Element goods=orderItem.addElement("goods");
        goods.addText("瑜伽垫");
        //第二个节点
        Element orderItem2=root.addElement("order");
        orderItem2.addAttribute("id", "2");
        Element orderNum2=orderItem2.addElement("orderNum");
        orderNum2.addText("2014010504");
        Element goods2=orderItem2.addElement("goods");
        goods2.addText("手机");
        doc.setXMLEncoding("UTF-8");
        System.out.println(doc.asXML());
	}

}



xml的生成比较注重层次感,应该说生成xml的代码难度其实不大

2.xml字符串的解析

package org.lxh;
import java.io.File;
import java.io.FileInputStream;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.*;

import org.dom4j.*;
import org.dom4j.io.SAXReader;
public class ParseXml {

	public static void main(String[] args) throws Exception {
	//读取xml的文本文件
	File f=new File("d:"+File.separator+"test2.txt");
	FileInputStream in=new FileInputStream(f);
        FileChannel chan=in.getChannel();
        MappedByteBuffer buf=chan.map(FileChannel.MapMode.READ_ONLY, 0, f.length());
        byte[] b=new byte[(int)f.length()];
        int len=0;
        while(buf.hasRemaining()){
    	   b[len]=buf.get();
    	   len++;
        }
        chan.close();
        in.close();
       
		
	Document doc=DocumentHelper.parseText(new String(b,0,len,"GBK"));
        Element root=doc.getRootElement();
        Iterator<Element> it=root.elementIterator();
        List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
        //取得第二层的节点
        while(it.hasNext()){
        	Map<String,Object> m=new HashMap<String,Object>();
        	Element e=it.next();
        	m.put("id",e.attributeValue("id"));
        	Iterator<Element> it2=e.elementIterator();
        	//取得第三层层的节点
        	while(it2.hasNext()){
        		Element child=it2.next();
        		if("orderNum".equals(child.getName())){
        			m.put("orderNum", child.getText());
        		}
        		if("goods".equals(child.getName())){
        			m.put("goods", child.getText());
        		}
        		
        	}
        	list.add(m);
        }
        System.out.println(list);
	}

}
我这里为了写代码方便,就直接读取了一个xml的文本文件


三  php使用SimpleXml生成xml字符串和文件

<?php
  header("Content-type: text/html; charset=utf-8"); 
  $xml=new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><UsersInfo />');
  $item=$xml->addchild("item");
  $item->addchild("name","冯绍峰");
  $item->addchild("age","30"); 
  $item2=$xml->addchild("item");
  $item2->addchild("name","潘玮柏");
  $item2->addchild("age","29");
  $item2->addAttribute("id","02");
  header("Content-type: text/xml");
  echo $xml->asXml();
  $xml->asXml("student.xml");
?>

四  php使用SimpleXml解析xml字符串

<?php
  header("Content-type: text/html; charset=utf-8"); 
  $xml=simplexml_load_file("UserInfo.xml");
  //通过children取得根节点下面的子项
  for($i=0;$i<count($xml->children());$i++){
      foreach ($xml->children()[$i] as $key => $value ) {
       echo "$key:$value"."<br/>";
     }
  }
  
  
?>

我们可以看出php使用SimpleXml解析xml是最简单的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值