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()); } }
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是最简单的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |