package gov.gfmis.fap.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Element; /** * xml對象模型 * /屬性(值對模式保存) * * XMLData -父子結構則遞歸保存XMLData * /單個要素節點則存放屬性XMLData * \子節點 * \多個相同要素節點則存放List * 使用這種模式應避免讓元素名和屬性名相同 * eg: * */XMLData aa --XMLData bb * /List aa * ------>XMLData data \XMLData aa *\XMLData cc * * * @version 1.0 * @author victor * @see XMLObjectVisitor#visit(Element) * @see XMLObjectVisitor#visit(Attribute) * @since java 1.4.1 */ public class XMLData extends HashMap { private static final long serialVersionUID = 100000000000000L; /** * 重載Map的put方法,實現個性化需求 * @param childName 對象名 * @param child 對象 * @return 原值對象,若不存在則爲null */ public Object put(Object childName,Object child) { return this.addObject(this,(String)childName,child); } /** * 根據對象名,將對象保存在父對象中,覆蓋原同名對象 * @param parent 父Map對象 * @param child 子Map對象 * @param childName 子對象名稱 * @return 原值對象,若不存在則爲null */ private Object addObject(XMLData parent,String childName,Object child) { Object oldObj = parent.get(childName); if(parent.get(childName) == null) { super.put(childName,child); } else if(parent.get(childName) instanceof Map) { List list = new ArrayList(); list.add(parent.get(childName)); list.add(child); super.put(childName,list); } else if(parent.get(childName) instanceof List) { List ls = (List)parent.get(childName); ls.add(child); } else super.put(childName,child); return oldObj; } }
別人重寫的HashMap,做參考。java