替换xml/html中的属性值
2016-07-11 17:30
429 查看
<pre name="code" class="java"> /** * 获取指定HTML标签的指定属性的值 * @param source 要匹配的源文本 * @param element 标签名称 * @param attr 标签的属性名称 * @return 属性值列表 */ public static List<String> match(String source, String element, String attr) { List<String> result = new ArrayList<String>(); String reg = "<" + element + "[^<>]*?\\s" + attr + "=['\"]?(.*?)['\"]?\\s.*?>"; Matcher m = Pattern.compile(reg).matcher(source); while (m.find()) { String r = m.group(1); result.add(r); } return result; } /** * @param htmlStr html文本 * @param searchTag 要修改的目标标签 * @param searchAttrib 目标标签中的属性 * @param newContent 修改值 */ public static String updateHtmlTag(String htmlStr, String searchTag, String searchAttrib,String newContent) { String regxpForTag ="<\\s*" + searchTag + "\\s+([^>]*)\\s*>"; String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']+.([^\"|']+)[\"|']";//"=[\"|']([^[\"|']]+)[\"|']"; Pattern patternForTag = Pattern.compile(regxpForTag); Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib); Matcher matcherForTag = patternForTag.matcher(htmlStr); StringBuffer sb = new StringBuffer(); boolean result = matcherForTag.find(); while (result) { StringBuffer sbreplace = new StringBuffer("<"+searchTag +" "); //System.out.println(matcherForTag.group(1)); //matcherForTag.group() Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag .group(1)); if (matcherForAttrib.find()) { // System.out.println("ll"+matcherForAttrib.group()); // matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"" +startStr // + matcherForAttrib.group(1) + endStr); matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"" +newContent + "\""); } // matcherForTag.appendReplacement(sb, sbreplace.toString()); matcherForAttrib.appendTail(sbreplace); matcherForTag.appendReplacement(sb, sbreplace.toString()+">"); result = matcherForTag.find(); } matcherForTag.appendTail(sb); return sb.toString(); }