以HTML格式显示XML文件的差异

时间:2014-10-30 14:33:48

标签: java html xml

我正在研究这段代码,以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>

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

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

1 个答案:

答案 0 :(得分:1)

<替换为&lt;,将>替换为&gt;

问题解决了。


在您的情况下更具体,请执行以下操作:

    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>");

要让&lt; =和&gt; =不替换,这是有效的解决方案,但它有点讨厌:):

    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;