2014-10-30 30 views
0

我正在处理此代码以显示HTML格式中两个文件的差异。我正在使用Java进行此操作。这是我迄今为止所做的。 1.我正在将文件内容读入字符串数组。 2.使用LCS算法找到提及的最长的子序列矩阵here 3.使用字符串构建器创建Html头 4.使用LCS矩阵,将字符串附加到字符串缓冲区。 5.如果在两个字符串中存在差异,我将tr bgcolour更改为以不同的颜色显示。以HTML格式显示XML文件的差异

当我使用正常的文本文件时,这工作得很好。

代码片段:

 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> 

,因为哪个浏览器无法正确呈现它。

我该如何解决它?任何指针都会有帮助。

回答

1

通过&gt;

问题解决了替换<通过&lt;>


要在你的情况更具体的,只要做到以下几点:

sb.append("<tr bgcolor='#FF0000'>"); 
    sb.append("<td>"); 
    sb.append(x[i++].replaceAll("<", "&lt;").replaceAll(">", "&gt;")); 
    sb.append("</td>"); 
    sb.append("<td>"); 
    sb.append(y[j++].replaceAll("<", "&lt;").replaceAll(">", "&gt;")); 
    sb.append("</td>"); 
    sb.append("</tr>"); 

根据该意见,这甚至会更好:

sb.append("<tr bgcolor='#FF0000'>"); 
    sb.append("<td>"); 
    sb.append(x[i++].replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;")); 
    sb.append("</td>"); 
    sb.append("<td>"); 
    sb.append(y[j++].replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;")); 
    sb.append("</td>"); 
    sb.append("</tr>"); 

要有< =和> =未被替换,这是工作的解决方案,但它是一个有点讨厌:):

String x = "<Hello>&<=<blabbalal>"; 
    System.out.println(x.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("&gt;=", ">=").replaceAll("&lt;=", "<=")); 

有这样的输出:

&lt;Hello&gt;&amp;<=&lt;blabbalal&gt; 
+0

做这些替代品之前,请'&'和''&。 – VGR 2014-10-30 14:39:42

+0

这很好。我做了这些改变,效果很好。现在在我的普通Java代码中,如果有<=它也会被替换。任何你能想到的解决方案? – 2014-10-30 14:52:19

+0

@BibinMathew - 我增加了解决方案,但如果他们独处,它不适用于'<' or '>'。 – libik 2014-10-30 14:59:18