论坛首页 入门技术论坛

Xml另类解决方案,超高速,无解析,解决方案。

浏览 1659 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (4)
作者 正文
   发表时间:2011-03-02   最后修改:2011-03-02
往往在数据传输中,我们如果使用xml也不会使用到所有的xml特性。
不一定要有属性,比如我们约定了传输完全是节点类型。
如下面, 我们获得,第一个用户的name.



package a;

import org.open4j.log.Logger;
import org.open4j.xml.Ssp;
import org.open4j.xml.Xml;

public class K {

	public static void main(String[] args) 
	{
		
		String xml="<root><user><id>1</id><name>张三</name></user><user><id>2</id><name>张222</name></user></root>";
		
		
		Xml.parseXml(xml);
		Ssp ssp=new Ssp(xml);
		ssp.get("user").get("name").toString();
		
		
		String name=null;
		String name2=null;
		
		
		
		long d2=System.currentTimeMillis();
		for(int i=0;i<9999;++i){
			
			name2=Xml.parseXml(xml).getRoot().getChildrenByTagName("user").get(0).getChildrenByTagName("name").get(0).getChildren().get(0).toString();
		}
		Logger.write(System.currentTimeMillis()-d2);
		
		
		
		
		long d=System.currentTimeMillis();
		for(int i=0;i<9999;++i){
			
			Ssp s=new Ssp(xml);
			
			name=s.get("user").get("name").toString();
		}
		Logger.write(System.currentTimeMillis()-d);
		
		Logger.write(name+" : "+name2);
		
	}

}


运行结果:
906
16
张三 : 张三


   发表时间:2011-03-02  
ssp代码。


package org.open4j.xml;
import java.util.ArrayList;
import java.util.List;

import org.open4j.xml.ex.SspTagNotFoundException;


public class Ssp 
{
	private String thexml=null;
	public Ssp(String xml)
	{
		this.thexml=xml.trim();
	}
	public String toString(){
		return this.thexml;
	}
	
	public Ssp get(String tag){
		return this.getFirst(tag);
	}
	public Ssp getFirst(String tag)
	{
		String t="<"+tag+">";
		int bg=this.thexml.indexOf(t);
		if(bg==-1){throw new SspTagNotFoundException("<"+tag+"> not found!");}
		bg+=t.length();
		int end=this.thexml.indexOf("</"+tag+">");
		if(end==-1){throw new SspTagNotFoundException("</"+tag+"> not found!");}
		return new Ssp(this.thexml.substring(bg,end).trim());
	}
	public Ssp getLast(String tag)
	{
		String t="<"+tag+">";
		int bg=this.thexml.lastIndexOf(t);
		if(bg==-1){throw new SspTagNotFoundException("<"+tag+"> not found!");}
		bg+=t.length();
		int end=this.thexml.lastIndexOf("</"+tag+">");
		if(end==-1){throw new SspTagNotFoundException("</"+tag+"> not found!");}
		return new Ssp(this.thexml.substring(bg,end).trim());
	}
	public List<Ssp> getAll(String tag)
	{
		String bTag="<"+tag+">";
		int len=bTag.length();
		String eTag="</"+tag+">";
		List<Integer> bgs=allIndex(bTag);
		List<Integer> eds=allIndex(eTag);
		if(bgs.size()==0||bgs.size()!=eds.size()){
			throw new SspTagNotFoundException("Number of "+bTag+" not equals Number of "+eTag);
		}
		List<Ssp> list=new ArrayList<Ssp>(bgs.size());
		for(int i=0;i<bgs.size();i++){
			list.add(new Ssp(this.thexml.substring(bgs.get(i)+len,eds.get(i)).trim()));
		}
		return list;
	}
	/*
	 * ˽�з���
	 */
	private  List<Integer> allIndex(String tag)
	{
		int len=tag.length();
		List<Integer>list=new ArrayList<Integer>();
		boolean flag=false;
		for(int i=0;i<=this.thexml.length()-len;i++)
		{
			if(this.thexml.charAt(i)=='<')
			{
				flag=true;
				for(int k=1;k<len;k++)
				{
					if(this.thexml.charAt(i+k)!=tag.charAt(k)){
						flag=false;break;
					}
				}
				if(flag){
					list.add(i);
					i+=len-1;
				}
			}
		}
		return list;
	}
	
	public Ssp get(String tag,int index)
	{
		int count=-1;
		String bt="<"+tag+">";
		String et="</"+tag+">";
		boolean flag=false;
		for(int i=0;i<=this.thexml.length()-bt.length();i++)
		{
			if(this.thexml.charAt(i)=='<'){
				flag=true;
				for(int k=1;k<bt.length();k++){
					if(this.thexml.charAt(i+k)!=bt.charAt(k)){
						flag=false;break;
					}
				}
				if(flag){
					count++;
					if(count==index)
					{
						int bg=i+bt.length();
						int end=this.thexml.indexOf(et , bg);
						return new Ssp(this.thexml.substring(bg,end).trim());
					}
				}
			}
		}
		throw new SspTagNotFoundException("index"+index+"后找不到"+tag+"!");
	}
}



下面是帖子测试代码, 依赖的jar包
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics