2014-10-30 69 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