/* 
 * Created on 2004/10/24 
 * Author aki@www.xucker.jpn.org 
 * License Apache2.0 or Common Public License 
 */ 
package org.jpn.xucker.commons.util; 
 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Vector; 
 
 
 
/** 
 *  
 * 
 */ 
public class TagUtil { 
public static String getTag(String text){ 
String result=null; 
if(text.charAt(0)=='<'){ 
    int find=text.indexOf(" "); 
    if(find!=-1){ 
        String tagName=text.substring(1,find); 
        int last=text.indexOf(tagName+"/>"); 
        if(last!=-1){ 
            result=text.substring(0,tagName.length()+last+2); 
           return result; 
        } 
        last=text.indexOf("</"+tagName+">"); 
        if(last!=-1){ 
            return text.substring(0,tagName.length()+last+3); 
        } 
         
       last=text.indexOf("/>"); 
        if(last!=-1){ 
            result=text.substring(0,last+2); 
           return result; 
        } 
    }else{ 
        return null; 
    } 
     
} 
return result; 
} 
 
public static String[] getTagByName(String text,String name){ 
    List list=new Vector(); 
    int start=0; 
    while(true){ 
        int index=text.toLowerCase().indexOf("<"+name.toLowerCase(),start); 
        if(index==-1){ 
            break; 
        }else{ 
            int end=text.toLowerCase().indexOf("</"+name.toLowerCase()+">",start+name.length()+2); 
            if(end!=-1){ 
              // System.out.println("text:"+text.substring(index,end+name.length()+3)); 
                list.add(text.substring(index,end+name.length()+3)); 
                start=end+name.length()+3; 
            } 
        } 
    } 
    return (String[])list.toArray(new String[list.size()]); 
} 
 
public static String getContain(String tag){ 
    if(tag.startsWith("<")){ 
        int index=tag.indexOf(">"); 
        if(index!=-1){ 
            int last=tag.indexOf("<",index); 
            if(last!=-1){ 
                return tag.substring(index+1,last); 
            } 
        } 
        return null; 
    }else{ 
        return null; 
    } 
} 
 
public static int QUOTE=1; 
public static int KEY=0; 
public static int VALUE=2; 
public static Map getAttribute(String tag){ 
    Map map=new HashMap(); 
    if(tag.startsWith("<")){ 
        int start=tag.indexOf(" "); 
        if(start==-1) 
            return map; 
        int end=tag.indexOf(">",start+1); 
        if(end==-1) 
            return map; 
         
        String atrs=tag.substring(start+1,end); 
         
        int mode=KEY; 
        String quote=null; 
        String key=""; 
        String value=""; 
        for(int i=0;i<atrs.length();i++){ 
            if(mode==KEY){ 
            if(Character.isWhitespace(atrs.charAt(i))){ 
                 
            }else{ 
                if(atrs.charAt(i)=='='){ 
                    mode=QUOTE; 
                    
                }else{ 
                    if( atrs.charAt(i)=='/'){ 
                        break; 
                    } 
                key+=atrs.charAt(i); 
                } 
            } 
            }else if(mode==QUOTE){ 
                if(Character.isWhitespace(atrs.charAt(i))){ 
                     
                }else{ 
                    if(atrs.charAt(i)=='\''){ 
                        quote="'"; 
                        mode=VALUE; 
                    }else if(atrs.charAt(i)=='"'){ 
                        quote="\""; 
                        mode=VALUE; 
                    }else{ 
                        quote=""; 
                        mode=VALUE; 
                        value+=atrs.charAt(i); 
                    } 
                     
                } 
            }else if(mode==VALUE){ 
                if(quote.equals(""+atrs.charAt(i))){ 
                     
                    map.put(key,value); 
                     
                    key=""; 
                    value=""; 
                    mode=KEY; 
                }else{ 
                    if(quote.equals("") && (Character.isWhitespace(atrs.charAt(i)) || atrs.charAt(i)=='/')){ 
                        map.put(key,value); 
                         
                        key=""; 
                        value=""; 
                        mode=KEY; 
                    }else{ 
                    value+=atrs.charAt(i); 
                    } 
                } 
            } 
        } 
         
        if(value.length()>0){ 
            if(key.length()>0){ 
                map.put(key,value); 
            } 
        }else if(key.length()>0){ 
            map.put(key,"true"); 
        } 
        return map; 
    }else{ 
        return map; 
    } 
} 
   
}
    
    |