| |
之前内容请参看:好东西大家分享:java&xml的学习心得(1) xmltooltest.class实现了对xml文档的操作。包括建立一个新xml document.档结构及内容或从指定xml文件或的document.构和内容,output到指定的xml文件(或更新xml文件),获取和设定指定节点名的指定属性(或属性列表),在指定节点添加子节点、删除子节点、编辑子节点(先删除在添加,待完善),支持在文档中定位(下标定位,和查询定位,如:定位到test节点的 name attribute的value="张治中"的节点,有简单的复合查询定位,暂时是全and的关系. :) ),定位后可以和全面的操作联合使用(有点数据库的影子,和自己想做的应用有关)。后来又根据它做了一个数据库和xml对导的例子。代码如下:
package com.ceic.workflow.xml.tool; import com.ceic.workflow.xml.*; import org.w3c.dom.*; /** * title: xml处理工具的 运算和实现部分的接口 * description: xml处理工具的 运算和实现部分的接口 * copyright: copyright (c) 2003 * company: 国电信息中心 * @author 张治中 * @version 1.0 * xml处理工具的 运算和实现部分 的接口 * xmltool的实现子类,其中的xml解析器从xmlparserfactory中获得. * 没有说明的方法和参数参见xmltool接口. */ public class xmltooltest implements xmltool { private xmlparser parser; private string parsertype= xmlparserfactory.getdefaulttype(); private string parserclassname=""; private int index=0; private string markname=""; private document.nbspdoc; private int defaultbegin=0; private string encoding="utf8"; private string filepath=""; private boolean enablemakeup=false; private string header=" "; public xmltooltest() {
} public object build(string path, boolean vali) { if(path!=null&&path.length() >0){ parser=xmlparserfactory.getxmlparser (parsertype,parserclassname); if(parser!=null){ doc=(document.parser.parse(path,vali); filepath=path; return doc; } } return null; } public object build(string xmlstring) { if(xmlstring!=null&&xmlstring.length() >0){ parser=xmlparserfactory.getxmlparser (parsertype,parserclassname); if(parser!=null){ doc=(document.parser.parsestring(xmlstring); filepath=""; return doc; } } return null; } public void setdocument.ource(document.nbspdocs){ doc=docs; }
public void setparser(string parsername, string classname) { if(parsername!=null&&parsername.length() >0){ parsertype=parsername; parserclassname=classname; } }
public void setproperty(string nodename,string propertyname,string value,boolean setall){ try{ nodelist list=doc.getelementsbytagname(nodename); if(list.getlength() >0&&value!=null&&value.length()>0) { if(setall){ for(int i=0;i
if(propertyname!=null&&propertyname.length()>0) {
((element)list.item(i)).setattribute (propertyname,value); } else{ list.item(i).setnodevalue(value); } }
}else{
if(propertyname!=null&&propertyname.length()>0){ if(nodename.equals(markname)){ ((element)list.item(index)).setattribute (propertyname,value); } else{ ((element)list.item(defaultbegin)). setattribute(propertyname,value); } }else{
if(nodename.equals(markname)){ list.item(index).setnodevalue(value); } else{ list.item(defaultbegin).setnodevalue(value); }
} } } }catch(exception ee){ system.out.println("设定"+nodename+"节点的"+ propertyname+"属性出错"); } } public string getproperty(string nodename, string propertyname) { try{ nodelist list=doc.getelementsbytagname(nodename); if(list.getlength() >0){ if(propertyname!=null&&propertyname.length() >0){ if(nodename.equals(markname)){ return ((element)list.item(index)).getattribute (propertyname); }else{ return ((element)list.item(defaultbegin)). getattribute(propertyname); } }else{ if(nodename.equals(markname)){ return ((element)list.item(index)).getnodevalue() }else{ return ((element)list.item(defaultbegin)). getnodevalue() } } } return null; }catch(exception ee){ system.out.println("getproperty("+nodename+","+ propertyname+");出错"+ee.getmessage()); return null; } } public string[] getpropertys(string nodename, string propertyname) { try{ string[] temp; nodelist list=doc.getelementsbytagname(nodename); if(list.getlength() >0){ if(propertyname!=null&&propertyname.length() >0){ temp=new string[list.getlength()]; for(int i=0;i temp[i]=((element)list.item(i)). getattribute(propertyname); } return temp; }else{ temp=new string[list.getlength()]; for(int i=0;i temp[i]=((element)list.item(i)).getnodevalue() } return temp; } } return null; }catch(exception ee){ system.out.println("getpropertys("+nodename+","+ propertyname+");出错"); return null; } } public string getparent(string returnattr){ string tempreturn=""; string tempnode=markname int tempindex=index nodelist list=doc.getelementsbytagname(markname); node node=list.item(index); if(returnattr!=null&&returnattr.length() >0){ tempreturn=((element)node.getparentnode()). getattribute(returnattr); }else{ tempreturn=node.getparentnode().getnodevalue() } return tempreturn; }
public void setformat(string xmltoolname, string classname){}
public void addnode(string parent, node nodename, boolean addall) { try{ nodelist list=doc.getelementsbytagname(parent);
if(list.getlength() >0){ if(addall){ for(int i=0;i int type=nodename.getnodetype() switch(type){ case node.attribute_node: { ((element)list.item(i)).setattribute(((attr) nodename).getname() ,((attr)nodename).getvalue()); } default:{ list.item(i).appendchild(nodename); } } } }else{ if(parent.equals(markname)){ int type=nodename.getnodetype() switch(type){ case node.attribute_node: { ((element)list.item(index)).setattribute (((attr)nodename).getname() ,((attr)nodename).getvalue()); } default:{ list.item(index).appendchild(nodename); } } }else{
int type=nodename.getnodetype() switch(type){ case node.attribute_node: { ((element)list.item(defaultbegin)). setattribute(((attr)nodename).getname() , ((attr)nodename).getvalue()); } default:{ list.item(defaultbegin).appendchild(nodename); } }
} }
} }catch(exception e){ system.out.println("增加节点出错"); } } public void delnode(string parent,string nodename, boolean delall)
|
|