站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题java&xml心得(二)

java&xml心得(二)

摘要: java&xml心得(二)
内容: 作者-- joinme
(续 java&xml心得(一) )
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 doc;
private int DefaultBegin=0;
private String encoding="UTF8";
private String filepath="";
private boolean EnableMakeUp=false;
private String header="<?xml version=\"1.0\" ?>";
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 setDocumentSource(Document docs){
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)
{
try{
NodeList list=doc.getElementsByTagName(parent);
if(list.getLength() >0){
if(delall){
for(int i=0;i try{
((Element)list.item(i)).removeAttribute(NodeName);
}catch(Exception ee){}

NodeList tlist=list.item(i).getChildNodes() ;
if(tlist.getLength() >0){
for(int k=0;k if(NodeName.equals(tlist.item(k).getNodeName())){
short type=tlist.item(k).getNodeType() ;
if(type==Node.ATTRIBUTE_NODE){
((Element)list.item(i)).removeAttribute(NodeName);
}
else list.item(i).removeChild(tlist.item(k));
break;
}
}
}

}
}else{
if(parent.equals(markName)){
try{
((Element)list.item(Index)).removeAttribute(NodeName);
}catch(Exception ee){}

NodeList tlist=list.item(Index).getChildNodes() ;
if(tlist.getLength() >0){
for(int k=0;k if(NodeName.equals(tlist.item(k).getNodeName())){
short type=tlist.item(Index).getNodeType() ;
if(type==Node.ATTRIBUTE_NODE){
((Element)list.item(Index)).removeAttribute(NodeName);
}
else list.item(Index).removeChild(tlist.item(k));
break;
}
}
}
}else{
try{
((Element)list.item(DefaultBegin)).removeAttribute(NodeName);
}catch(Exception ee){}

NodeList tlist=list.item(DefaultBegin).getChildNodes() ;
if(tlist.getLength() >0){
for(int k=0;k if(NodeName.equals(tlist.item(k).getNodeName())){
short type=tlist.item(Index).getNodeType() ;
if(type==Node.ATTRIBUTE_NODE){
((Element)list.item(DefaultBegin)).removeAttribute(NodeName);
}
else list.item(DefaultBegin).removeChild(tlist.item(k));
break;
}
}
}

}
}
}
}catch(Exception e){
System.out.println("删除节点出错");
}
}


public void editNode(String parent,String NodeOld,Node NodeNew,boolean editAll)
{
try{
NodeList list=doc.getElementsByTagName(parent);

if(list.getLength() >0){
if(editAll){
for(int i=0;i NodeList tlist=list.item(i).getChildNodes() ;
if(tlist.getLength() >0){
for(int k=0;k if(NodeOld.equals(tlist.item(k).getNodeName())){
list.item(i).replaceChild(tlist.item(k),NodeNew);
break;
}
}
}
}
}else{
if(parent.equals(markName)){
NodeList tlist=list.item(Index).getChildNodes() ;
if(tlist.getLength() >0){
for(int k=0;k if(NodeOld.equals(tlist.item(k).getNodeName())){
list.item(Index).replaceChild(tlist.item(k),NodeNew);
break;
}
}
}

}else{


NodeList tlist=list.item(DefaultBegin).getChildNodes() ;
if(tlist.getLength() >0){
for(int k=0;k if(NodeOld.equals(tlist.item(k).getNodeName())){
list.item(DefaultBegin).replaceChild(tlist.item(k),NodeNew);
break;
}
}
}


}
}
}
}catch(Exception e){
System.out.println("替换节点出错");
}
}


public boolean setMark(int index)
{
NodeList list=doc.getElementsByTagName(markName);
if(list.getLength() >0&&index<=list.getLength()-1&&index>=0 ) {
Index=index;
return true;
}
return false;
}


public boolean setMark(String name,String value)
{
if(value!=null&&value.length() >0){
try{
int i=0;
NodeList list=doc.getElementsByTagName(markName);
boolean attrs=false;
boolean find=false;
if(name!=null&&name.length() >0) attrs=true;
if(list.getLength() >0){
for(i=0;i if(attrs){
if(value.equals(((Element)list.item(i)).getAttribute(name))){
find=true;
break;
}
}
else{
if(value.equals(list.item(i).getNodeValue())){
find=true;
break;
}
}
}
if(find){
Index=i;
return true;
}else{
return false;
}
}
}catch(Exception e){
System.out.println("setMark(String name,String value)无效");
return false;
}
}
return false;
}
public boolean setMarkAdv(String[] name,String[] value,String operation){
int tempindex=Index;
try{
if(name!=null&&name.length >0&&value!=null&&value.length >0&&name.length ==value.length){
if(operation==null||operation.length() ==0) operation ="and";
if(!operation.equals("and")&&!operation.equals("or")) operation="and";
if(operation.equals("and")){
boolean find=true;
int[] results=new int[name.length];
for(int i=0;i if(setMark(name[i],value[i])){
results[i]=Index ;
if(i>0){
if(results[i]!=results[i-1]){
find=false;
break;
}
}
}else{
find=false;
break;
}
}
if(find){
return true;
}else{
Index=tempindex;
return false;
}
}else{
boolean thefind=false;
for(int j=0;j if(setMark(name[j],value[j])){
thefind=true;
break;
}
}
if(thefind){
return true;
}else{
return false;
}
}
}

return false;
}catch(Exception ex){
System.out.println("setMarkAdv(String[] name,String[] value,String operation)出错:"+ex.getMessage());
Index=tempindex;
return false;
}
}

public void setMarkSign(String NodeName)
{
markName=NodeName;
}
public Document CreateDocument(){
try{
Document node=((Document)Class.forName("com.ibm.xml.dom.DocumentImpl").newInstance()) ;
return node;

}catch(Exception ex){
System.out.print("找不到com.ibm.xml.dom.DocumentImpl");
return null;
}
}
public Element CreateElement(String name){
return doc.createElement(name);
}
public Comment CreateComment(String name){
return doc.createComment(name);
}
public Text CreateText(String name){
return doc.createTextNode(name);
}
public Attr CreateAttr(String name){
return doc.createAttribute(name) ;
}
public void Output(String path){
Output(path,encoding,doc,false);
}
public void Output(){
Output(filepath,encoding,doc,false);
}
public void setEncoding(String encod){
encoding=encod;
}
public void isEnableMakeUp(){
EnableMakeUp=true;
}
public void isNotEnableMakeUp(){
EnableMakeUp=false;
}
public void Output(String path,Node docu){
Output(path,encoding,docu,false);
}
public void Output(String path,Node docu,boolean noTop){
Output(path,encoding,docu,noTop);
}
public void Output(String path,String NodeName,boolean noTop){
NodeList list=doc.getElementsByTagName(NodeName);
Node tempnode;
if(list.getLength() >0){
if(NodeName.equals(markName)){
tempnode=list.item(getIndex());
}else{
tempnode=list.item(DefaultBegin);
}
Output(path,encoding,tempnode,noTop);
}
}
public void Output(String path,String NodeName,int indexs,boolean noTop){
NodeList list=doc.getElementsByTagName(NodeName);
Node tempnode;
if(list.getLength() >0){
if(indexs<=list.getLength() -1){
tempnode=list.item(indexs);
}
else{
if(NodeName.equals(markName)){
tempnode=list.item(getIndex());
}else{
tempnode=list.item(DefaultBegin);
}
}
Output(path,encoding,tempnode,noTop);
}
}



private void Output(String path,String encod,Node docu,boolean noTop){
try{
if(path!=null&&path.length()>0){
filepath=path;
}
if(encod!=null&&encod.length() >0){
encoding =encod;
}
XmlBuilder builder=new XmlBuilder();
if(!EnableMakeUp){
builder.setIndent("");
builder.setlineSeparator("");
}
builder.setXmlHeader(header);
builder.printDOMTree(docu,noTop);

String result=builder.getXmlResult() ;



XmlOutput out=new XmlOutput(filepath);
out.setEncoding(encoding);
out.Output(result);
}catch(Exception ee){
System.out.println(ee.getMessage());
System.out.println("写入Xml文件:"+filepath+" 出错");
}
}
public int getIndex(){
return Index;
}
public String getCurrentNodeName(){
return markName ;
}
public Document getDocumentSource(){
return doc ;
}
public void setHeader(String Header){
if(Header!=null&&Header.length() >0){
header=Header;
}
}
}
XMLToolFactory.class 代码如下:
package com.ceic.workflow.xml;

import com.ceic.workflow.xml.Tool.XMLToolTest;
import java.util.*;
/**
* XMLTool的工厂类。为其它类提供XML处理工具的 运算和实现部分的类。
*/
public class XMLToolFactory
{
private static Hashtable table;
private static String defaultType;
private static String ower;
/**
* @roseuid 3ECC2FC101BF
*/
private XMLToolFactory()
{

}
/**
* 获得一个常用XMLTool.
* @return com.ceic.workflow.xml.XMLTool
* @roseuid 3ECC2243019B
*/
public static XMLTool getXMLTool()
{
try{
return ((XMLTool)Class.forName(table.get(ower).toString()).newInstance());
}catch(Exception ee){
System.out.println("获得常用XMLTool出错");
return null;
}
}
/**
* 获得一个XMLTool.通过参数获得XMLTool的一个实现子类.
* @param type - XMLTool已实现子类在XMLToolFactory中的type名
* @param classname -
* XMLTool实现子类的class名(包含package名),如com.ceic.workflow.xml.tool.XMLToolTest
* .默认为null或空字符串。
* @return com.ceic.workflow.xml.XMLTool
* @roseuid 3ECC2243019B
*/
public static XMLTool getXMLTool(String type, String classname)
{
try{
if(type==null||type.length() <=0){
type=defaultType;
}
if(table.containsKey(type)){
return ((XMLTool)Class.forName(table.get(type).toString()).newInstance());
}
if(classname!=null&&classname.length() >0){
try{
XMLTool temp=((XMLTool)Class.forName(classname).newInstance());
if(type!=null&&type.length() >0){
table.put(type,classname);
}
return temp;
}catch(Exception ee){
System.out.println(ee.getMessage() );
System.out.println("指定的XMLTool不存在");
return null;
}
}
return null;
}catch(Exception e){
System.out.println(e.getMessage() );
System.out.println("指定的XMLTool不存在");
return null;
}
}
public static String getDefaultType(){
return defaultType;
}

static
{
table=new Hashtable();
table.put("test","com.ceic.workflow.xml.Tool.XMLToolTest");
table.put("show","com.ceic.workflow.xml.Tool.XMLToolShow");
defaultType="test";
ower="show";
}
}
到现在为止,xmlparser和xmltool介绍完了。下一次介绍一下xmlbuilder.class,xmloutput.class和针对它们做的一些应用。

转载请注明出处与作者. Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd, scwcd 作者--
↑返回目录
前一篇: java&xml心得(三)
后一篇: java&xml心得(一)