/*
* 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;
}
}
}
|