| 
	
	
		
			
		
		      建造父目录节点以及数的像关操作
 
		 
				  
    public
				 
				class
				 ResultFolder 
				extends
				 ResultItem  { 
   /** */
						
								/** 
  * 字对象向量 
  */ 
  private
						 Vector vtItems 
						=
						 
						new
						 Vector(); 
   /** */
						
								/** 
  * 构造函数 
  * 
								@param
								 sName 参数名称 
  */ 
    public
						 ResultFolder(String sName)  { 
  super
								(sName); 
  } 
   
    /** */
						
								/** 
  * 设置内容 
  * 
								@param
								 newValue 内容 
  */ 
    public
						 
						void
						 setValue(String newValue)  { 
  //
								 Can't set value to a ResultFolder 
  //
								System.out.println("Can't set value to a ResultFolder"); 
  } 
   
    /** */
						
								/** 
  * 获取内容 
  * 
								@return
								 内容 
  */ 
    public
						 String getValue()  { 
  //
								 Can't get value of a ResultFolder" 
  //
								System.out.println("Can't get value of a ResultFolder"); 
  return
								 
								""
								; 
  } 
    /** */
						
								/** 
  * 增加数据子项 
  * 
								@param
								 item 子项 
  */ 
    public
						 
						void
						 appendChild(ResultItem item)  { 
  vtItems.addElement(item); 
  item.setParent(
								this
								); 
  } 
   
    /** */
						
								/** 
  * 从结果树中移去一个节点,不进行进行遍历查找 
  * 
								@param
								 item 节点 
  * 
								@return
								 true-成功,flase-失败 
  */ 
    public
						 
						boolean
						 removeChild(ResultItem item)  { 
  return
								 removeChild(item, 
								false
								); 
  } 
   
    /** */
						
								/** 
  * 从结果树中移去一个节点,进行递归查找 
  * 
								@param
								 item  节点 
  * 
								@param
								 bRecursive  true-递归查找, false-不作递归查找 
  * 
								@return
								 true-成功, false-失败 
  */ 
    public
						 
						boolean
						 removeChild(ResultItem item, 
						boolean
						 bRecursive)  { 
   if
								(
								!
								vtItems.removeElement(item) 
								&&
								 bRecursive)  { 
   for
										(
										int
										 i
										=
										0
										; i
										<
										vtItems.size(); i
										++
										)  { 
  Object o 
												=
												 vtItems.elementAt(i); 
   if
												( o 
												instanceof
												 ResultFolder)  { 
  ( (ResultFolder) o).removeChild(item, 
														true
														); 
  } 
  } 
  } 
  return
								 
								false
								; 
  } 
   
    /** */
						
								/** 
  * 递归查找具有指定值的ResultItem 
  * 
								@param
								 sKey 名称 
  * 
								@param
								 bRecursive 是否递归查找 
  * 
								@return
								 节点 
  */ 
    public
						 ResultItem findSingleItem(String sKey, 
						boolean
						 bRecursive)  { 
  ResultItem item 
								=
								 
								null
								; 
   for
								(
								int
								 i
								=
								0
								; i
								<
								vtItems.size(); i
								++
								)  { 
  item 
										=
										 (ResultItem)vtItems.elementAt(i); 
   if
										(item.getName().equalsIgnoreCase(sKey))  { 
  return
												 item; 
  } 
    else
										 
										if
										(bRecursive 
										&&
										 item 
										instanceof
										 ResultFolder)  { 
  ResultItem subItem 
												=
												 ((ResultFolder)item).findSingleItem(sKey, 
												true
												); 
   if
												(subItem 
												!=
												 
												null
												)  { 
  return
														 subItem; 
  } 
  } 
  } 
  return
								 
								null
								; 
  } 
   
    /** */
						
								/** 
  * 递归查找具有指定值的ResultItem的值 
  * 
								@param
								 sKey 名称 
  * 
								@param
								 bRecursive 是否递归查找 
  * 
								@return
								 节点的值 
  */ 
    public
						 String findSingleValue(String sKey, 
						boolean
						 bRecursive)  { 
  ResultItem item 
								=
								 findSingleItem(sKey, bRecursive); 
   if
								(item 
								!=
								 
								null
								)  { 
  return
										 item.getValue(); 
  } 
  return
								 
								null
								; 
  } 
    /** */
						
								/** 
  * 非递归查找具有指定值的ResultItem的值 
  * 
								@param
								 sKey 节点名称 
  * 
								@return
								 节点值 
  */ 
    public
						 String findSingleValue(String sKey)  { 
  return
								 findSingleValue(sKey, 
								false
								); 
  } 
    /** */
						
								/** 
  * 找到关键字为特定值的Item列表 
  * 
								@param
								 sKey 节点名称 
  * 
								@return
								  Item向量 
  */ 
    public
						 Vector findItems(String sKey)  { 
  Vector vt 
								=
								 
								new
								 Vector(); 
   for
								(
								int
								 i
								=
								0
								; i
								<
								vtItems.size(); i
								++
								)  { 
  ResultItem item 
										=
										 (ResultItem)vtItems.elementAt(i); 
   if
										(item.getName().equalsIgnoreCase(sKey))  { 
  vt.addElement(item); 
  } 
  } 
  return
								 vt; 
  } 
    /** */
						
								/** 
  * 找到关键字为特定值的Item 
  * 
								@param
								 sKey 节点名称 
  * 
								@return
								  Item 
  */ 
    public
						 ResultItem findSingleItem(String sKey)  { 
   for
								(
								int
								 i
								=
								0
								; i
								<
								vtItems.size(); i
								++
								)  { 
  ResultItem item 
										=
										 (ResultItem)vtItems.elementAt(i); 
   if
										(item.getName().equalsIgnoreCase(sKey))  { 
  return
												 item; 
  } 
  } 
  return
								 
								null
								; 
  } 
    /** */
						
								/** 
  * 追加子节点 
  * 
								@param
								 key 子节点名称 
  * 
								@param
								 value 子节点值 
  * 
								@return
								 子节点 
  */ 
    public
						 ResultItem appendChild(String key, String value)  { 
  ResultItem item 
								=
								 
								new
								 ResultItem(key); 
  item.setValue(value); 
  this
								.appendChild(item); 
  return
								 item; 
  } 
    /** */
						
								/** 
  * 追加子目录 
  * 
								@param
								 key 名称 
  * 
								@return
								 子目录 
  */ 
    public
						 ResultFolder appendChildFolder(String key)  { 
  ResultFolder folder 
								=
								 
								new
								 ResultFolder(key); 
  this
								.appendChild(folder); 
  return
								 folder; 
  } 
    /** */
						
								/** 
  * 获取子项向量 
  * 
								@return
								 子项向量 
  */ 
    public
						 Vector getChildItems()  { 
  return
								 vtItems; 
  } 
    /** */
						
								/** 
  * 非递归方式判断是否含有指定子项 
  * 
								@param
								 aValue 子项名称 
  * 
								@return
								 true-是, false-否 
  */ 
    public
						 
						boolean
						 hasValue(String aValue)  { 
  return
								 hasValue(aValue, 
								false
								); 
  } 
    /** */
						
								/** 
  * 判断是否含有指定子项 
  * 
								@param
								 aValue 子项名称 
  * 
								@param
								 bRecursive 是否以递归方式 
  * 
								@return
								 true-是, false-否 
  */ 
    public
						 
						boolean
						 hasValue(String aValue, 
						boolean
						 bRecursive)  { 
   for
								(
								int
								 i
								=
								0
								; i
								<
								vtItems.size(); i
								++
								)  { 
  ResultItem item 
										=
										 (ResultItem)vtItems.elementAt(i); 
   if
										(item.getValue().equals(aValue))  { 
  return
												 
												true
												; 
  } 
    else
										 
										if
										(bRecursive 
										&&
										 (item 
										instanceof
										 ResultFolder))  { 
  boolean
												 bOK 
												=
												 ((ResultFolder)item).hasValue(aValue, 
												true
												); 
  if
												(bOK) 
  return
												 
												true
												; 
  } 
  } 
  return
								 
								false
								; 
  } 
    /** */
						
								/** 
  * 获取Html安全代码 
  * 
								@param
								 key 原代码 
  * 
								@return
								 Html安全代码 
  */ 
    public
						 String getValueByHtml(String key)  { 
  return
								 htmlEscape(findSingleValue(key)); 
  } 
   
    /** */
						
								/** 
  * Html安全代码转换程序 
  * 
								@param
								 xml 原代码 
  * 
								@return
								 Html安全代码 
  */ 
    public
						 
						static
						 String htmlEscape(String xml)  { 
  if
								 (xml 
								==
								 
								null
								) 
								return
								 
								null
								; 
  String ret 
								=
								 xml; 
  StringBuffer sb 
								=
								 
								new
								 StringBuffer(); 
  //
								 do & first 
  int
								 p, q; 
   for
								(q 
								=
								 ret.indexOf(
								"
								&
								"
								), p 
								=
								 
								0
								; q 
								>=
								 
								0
								; p 
								=
								 
								++
								q, q 
								=
								 ret.indexOf(
								"
								&
								"
								, p))  { 
  sb.append(ret.substring(p, q)); 
  sb.append(
										"
										&
										"
										); 
  } 
  sb.append(ret.substring(p)); 
  ret 
								=
								 sb.toString(); 
  sb 
								=
								 
								new
								 StringBuffer(); 
  //
								 do < 
    for
								(q 
								=
								 ret.indexOf(
								"
								<
								"
								), p 
								=
								 
								0
								; q 
								>=
								 
								0
								; p 
								=
								 
								++
								q, q 
								=
								 ret.indexOf(
								"
								<
								"
								, p))  { 
  sb.append(ret.substring(p, q)); 
  sb.append(
										"
										<
										"
										); 
  } 
  sb.append(ret.substring(p)); 
  ret 
								=
								 sb.toString(); 
  sb 
								=
								 
								new
								 StringBuffer(); 
  //
								 do > 
    for
								(q 
								=
								 ret.indexOf(
								"
								>
								"
								), p 
								=
								 
								0
								; q 
								>=
								 
								0
								; p 
								=
								 
								++
								q, q 
								=
								 ret.indexOf(
								"
								>
								"
								, p))  { 
  sb.append(ret.substring(p, q)); 
  sb.append(
										"
										>
										"
										); 
  } 
  sb.append(ret.substring(p)); 
  ret 
								=
								 sb.toString(); 
  sb 
								=
								 
								new
								 StringBuffer(); 
  //
								 do return 
    for
								(q 
								=
								 ret.indexOf(
								"
								\n
								"
								), p 
								=
								 
								0
								; q 
								>=
								 
								0
								; p 
								=
								 
								++
								q, q 
								=
								 ret.indexOf(
								"
								\n
								"
								, p))  { 
  sb.append(ret.substring(p, q)); 
  sb.append(
										"
										<br>
										"
										); 
  } 
  sb.append(ret.substring(p)); 
  ret 
								=
								 sb.toString(); 
  return
								 ret; 
  } 
  }     
	    
    
 |