浏览 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 张三 : 张三 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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包 |
|
返回顶楼 | |