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
{
privateXMLParser parser;
privateString ParserType=
XMLParserFactory.getDefaultType();
privateString ParserClassName="";
privateint Index=0;
privateString markName="";
privatedocument.nbspdoc;
privateint 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);