我有一個有點問題Java創建XML和使用XSL來創建HTML轉義字符
- 用java獲取用戶數據
- 使用JAXB
- 創建我的XSL模板
- 生成XML使用Java生成HTML
現在我有一個問題\r
和\n
和一些其他時髦的象徵LS。我應該用xml escapes還是html escapes解析我的xml的內容。默認的Java轉義工具類正在做一個糟糕的工作,我在網上找到的自定義類也不起作用。
會很好的解決方案是隻需更換\n
和\r
與<p> </p>
或者什麼html tag
將是一個很好的選擇嗎?謝謝!
一個簡單的例子是我的xml中的日期值,它以字符串的形式傳遞並使用了所有的轉義。
原文:(同一時間,我不記得) - Mon, 29 Feb 2016 13:40:58 EST (-0500)
轉義XML條目: - <Date>Mon&#044; 29 Feb 2016 03&#058;40&#058;43 EST&#040;&#045;0500&#041;</Date>
解析的HTML輸出: - Mon, 29 Feb 2016 03:40:43 EST(-0500)
編碼中出現明顯錯誤,d對特殊字符進行編碼。 但是當這種被解析成HTML
編輯:我也有這種垃圾,我甚至不認識是:
編輯:我固定日期的問題,但它仍然不是件正確編碼。
public static String entityEncode(String text) {
String result = text;
if (result == null)
return result;
return StringEscapeUtils.escapeXml(XMLStringUtil.escapeControlChrs(result));
}
而其他類:
public class XMLStringUtil {
private static HashSet<Character> illegalChrSet = new HashSet<>();
static {
final String illegalChrs = "\u0000\u0001\u0002\u0003\u0004\u0005" +
"\u0006\u0007\u0008\u000B\u000C\u000E\u000F\u0010\u0011\u0012" +
"\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C" +
"\u001D\u001E\u001F\uFFFE\uFFFF";
for (int i=0; i < illegalChrs.length(); i++) {
illegalChrSet.add(illegalChrs.charAt(i));
}
}
public static String escapeControlChrs(String str) {
if (str == null) {
return null;
}
StringBuilder sb = new StringBuilder(str.length());
for (int i=0; i < str.length(); i++) {
char chr = str.charAt(i);
if (illegalChrSet.contains(chr)) {
sb.append("\\x");
sb.append(String.format("%04x", (int) chr));
} else {
sb.append(chr);
}
}
return sb.toString();
}
public static String removeControlChrs(String str) {
if (str == null) {
return null;
}
StringBuilder sb = new StringBuilder(str.length());
for (int i=0; i < str.length(); i++) {
char chr = str.charAt(i);
if (! illegalChrSet.contains(chr)) {
sb.append(chr);
}
}
return sb.toString();
}
,但我仍然得到這個垃圾中的XML:
<Info>The origin domain used for comparison was: 
google.ca.ca
blah blah blah
</Info>
它發生在新的生產線。
我更新了這個問題,向您展示我現在編碼如何,但仍有一些問題:( – codeCompiler77