加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml的生成和解析

发布时间:2020-12-16 09:45:08 所属栏目:百科 来源:网络整理
导读:xml用的地方还是比较多的,使用场合比较多的是数据交换,xml的可读性虽然不错但就是体积大了点,json的话恰好相反体积小但是可读性比较差。这次准备分享的是xml的生成和解析,这次着重介绍DOM4J的使用 一 DOM,SAX解析xml的区别 1.DOM解析xml的时候会把整个x

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,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,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是最简单的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读