-
请帮忙解决Html字符串转换成xml的问题,谢谢20
我的任务是将很不规范的html标记转换为符合xml规范的字母小写的标记串,比如将:
<FONT face= "宋体" color = #6600ff size="5" >
转换为:<font face="宋体" color="#6600ff" size="5">
还比如将:
<A HREF='http://setlist.jhtml?method=list' TARGET=_blank>
转换为:<a href='http://setlist.jhtml?method=list' target="_blank">
【注意上述第一个例子中的空格、引号变化;以及第二个例子中的大小写变化、"?"、"="号】
在解决第一个例子时,我采用以下方法很好的解决了问题,正确而简单的对font属性的值添加了引号,
但是在第二个例子中,出现了正则表达式的特殊字符“?”,还有我用于分组判断的“=”号(method=list),
于是转换不能成功,不知道有没有更好的办法,想听以下大家的意见,谢谢!
下面是我的代码,请耐心的看完,谢谢!
/** * 将html中所有<...>里面的内容全部转换为小写<br> * @param htmlContent * @return */ public static String formatToLowerCase(String htmlContent) { if (htmlContent != null) { if (htmlContent.indexOf("<") != -1) { // 获取<...> Pattern p = Pattern.compile("<[^<>]+>"); Matcher m = p.matcher(htmlContent); HashMap tmpMap = new HashMap(); while (m.find()) { // 利用map主键不能重复的特性防止重复判断很长的文本内容 tmpMap.put(m.group(), ""); } if (!tmpMap.isEmpty()) { Iterator keys = tmpMap.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); String newKey = key.toLowerCase(); htmlContent = htmlContent.replaceAll(key, newKey); // 转换为小写 } } } } else { htmlContent = ""; } return htmlContent; } /** * 给Html的属性添加上引号<br> * @param newKey * @return */ public static String addQuotMarks(String newKey) { // 以"="号分组 String[] equalMarkArray = newKey.split("="); if (equalMarkArray != null && equalMarkArray.length > 1) { StringBuffer keyBuf = new StringBuffer(); for (int i = 0; i < equalMarkArray.length; i++) { int nDot = -1; String wholeStrng = equalMarkArray[i].trim(); if (i == 0)// 第一组 { keyBuf.append(wholeStrng + "="); } if (i != 0 && i != (equalMarkArray.length - 1))// 不是第一组,也不是最后一组 { nDot = wholeStrng.lastIndexOf(" "); wholeStrng = addQuotMarks(wholeStrng, nDot);// 调用静态方法 keyBuf.append(wholeStrng + "="); } else if (i == (equalMarkArray.length - 1))// 最后一组 { nDot = wholeStrng.lastIndexOf(">"); wholeStrng = addQuotMarks(wholeStrng, nDot);// 调用静态方法 keyBuf.append(wholeStrng); } } newKey = keyBuf.toString(); } return newKey; } /** * 私有静态方法,被addQuotMarks(String)调用<br> * 判断如果html属性的值不被单引号也不被双引号包含,则添加上双引号 * @param wholeStr * @param nDot * @return */ private static String addQuotMarks(String wholeStrng, int nDot) { String prefixStr = wholeStrng.substring(0, nDot).trim(); if (!prefixStr.substring(0, 1).equals("\"") && !prefixStr.substring(0, 1).equals("\'")) { prefixStr = "\"" + prefixStr + "\""; } return prefixStr + wholeStrng.substring(nDot); }
2008年5月26日 14:54
1个答案 按时间排序 按投票排序
-
采纳的答案
哥们,问对地方了,这玩艺可不简单,从头编码,不是一两个类就能搞定的,哪一个xml的解析框架不是很多代码啊。
对于非标准的html解析,我认为jericho是非常好的,trust me。
download:
http://sourceforge.net/project/showfiles.php?group_id=101067
home:
http://jerichohtml.sourceforge.net/doc/index.html
给你个例子:
import au.id.jericho.lib.html.*; import java.util.*; import java.io.*; import java.net.*; public class FormatSource { public static void main(String[] args) throws Exception { String sourceUrlString="data/test.html"; if (args.length==0) System.err.println("Using default argument of \""+sourceUrlString+'"'); else sourceUrlString=args[0]; if (sourceUrlString.indexOf(':')==-1) sourceUrlString="file:"+sourceUrlString; PHPTagTypes.register(); MasonTagTypes.register(); Source source=new Source(new URL(sourceUrlString)); source.getSourceFormatter().setIndentString(" ").setTidyTags(true).writeTo(new OutputStreamWriter(System.out)); } }
2008年5月28日 16:40
相关推荐
李白高力士脱靴李白贺知章告别课本剧.pptx
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
C语言项目之超级万年历系统源码,可以做课程设计参考 文章参考:https://www.qqmu.com/4373.html
Jupyter-Notebook
51单片机加减乘除计算器系统设计(proteus8.17,keil5),复制粘贴就可以运行
《中国房地产统计年鉴》面板数据资源-精心整理.zip
Jupyter-Notebook
Jupyter-Notebook
毕业论文答辩ppt,答辩ppt模板,共18套
Jupyter-Notebook
《中国城市统计年鉴》面板数据集(2004-2020年,最新).zip
Python基础 本节课知识点: • set的定义 • Set的解析 • set的操作 • set的函数
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
兵制与官制研究资料最新版.zip
Jupyter-Notebook
七普人口数据+微观数据+可视化+GIS矢量资源-精心整理.zip
Support package for Hovl Studio assets.unitypackage
土壤数据库最新集.zip
Jupyter-Notebook
1991-2020年中国能源统计年鉴-能源消费量(分省)面板数据-已更至最新.zip