我正在研究这段代码,以HTML格式显示两个文件的差异。我是用Java做的。这就是我到目前为止所做的。 1.我正在将文件内容读入String Arrays。 2.使用LCS算法找到here提到的最长子序列矩阵 3.使用字符串构建器创建Html头 4.使用LCS矩阵,将字符串附加到字符串缓冲区。 5.如果两个字符串有差异,我改变tr bgcolour以用不同的颜色显示它。
当我使用普通文本文件时,这非常适用。
代码段:
sb.append("<tr bgcolor='#FF0000'>");
sb.append("<td>");
sb.append( x[i++]);
sb.append("</td>");
sb.append("<td>");
sb.append( y[j++]);
sb.append("</td>");
sb.append("</tr>");
但是现在,如果我在两个Xml文件之间进行差异,我将无法看到内容。
如果文本正常,则形成的HTML为:
<td>normaltext</td>
//正确呈现
如果xml文件包含
<Hello>
标记所形成的html包含
<td><Hello></td>
因为哪个浏览器无法正确呈现它。
我该如何解决?任何指针都会有所帮助。
答案 0 :(得分:1)
将<
替换为<
,将>
替换为>
问题解决了。
在您的情况下更具体,请执行以下操作:
sb.append("<tr bgcolor='#FF0000'>");
sb.append("<td>");
sb.append( x[i++].replaceAll("<", "<").replaceAll(">", ">"));
sb.append("</td>");
sb.append("<td>");
sb.append( y[j++].replaceAll("<", "<").replaceAll(">", ">"));
sb.append("</td>");
sb.append("</tr>");
根据评论,这会更好:
sb.append("<tr bgcolor='#FF0000'>");
sb.append("<td>");
sb.append( x[i++].replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">"));
sb.append("</td>");
sb.append("<td>");
sb.append( y[j++].replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">"));
sb.append("</td>");
sb.append("</tr>");
要让&lt; =和&gt; =不替换,这是有效的解决方案,但它有点讨厌:):
String x = "<Hello>&<=<blabbalal>";
System.out.println(x.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll(">=", ">=").replaceAll("<=", "<="));
有这个输出:
<Hello>&<=<blabbalal>