我写了一个节点操作的接口inodeaction,直接贴代码:
getprevioussibling方法就是获取上一个相邻的节点,getnextsibling是获取下一个相邻的节点。
getbeifen方法主要是为了文档格式化用。是根节点则返回0.
printspace方法就是根据节点辈分,在写文档的时候格式化
再写了节点的基类node:
import java.io.serializable;import java.util.list;/** * xml文档节点基类,可以是普通节点,注释节点,文本节点 * */public abstract class node implements serializable,inodeaction{ /** * 序列化版本号 */ private static final long serialversionuid = 3858789701720999153l; /** * 父节点.规定 根节点的父节点为空 * */ protected element father; /** * 由文档对象直接添加的节点 domfather赋值为document对象 * */ protected document domfather; @override public integer getbeifen(){ integer n; if(father==null){ n = 0; return n; } node node = this; n = 0; while(node.father!=null){ n++; node = node.father; if(node.father==null){ return n; } } if(!(node.father==null)){ return null; } return n; } public element getfather() { return father; } @override public string printspace() { stringbuffer sb = new stringbuffer(); integer n = getbeifen(); if (n == null) { return sb.tostring(); } for (int i = 0; i nodelist = domfather.getnodelist(); int idx = nodelist.indexof(this); return idx==0?null:nodelist.get(idx-1); } } list nodelist = father.getnodelist(); int idx = nodelist.indexof(this); return idx==0?null:nodelist.get(idx-1); } @override public node getnextsibling() { if(father==null){ if(domfather==null){ documentutil.throwexception(节点还没添加到文档!); }else{ list nodelist = domfather.getnodelist(); int idx = nodelist.indexof(this); return idx==nodelist.size()-1?null:nodelist.get(idx+1); } } list nodelist = father.getnodelist(); int idx = nodelist.indexof(this); return idx==nodelist.size()-1?null:nodelist.get(idx+1); }}
关键在于编程的思想。有想法就什么都能实现。下面就是写节点的具体实现类了。另起一篇。
