处理 java 和 xml 之间的文本转换



>我有一个网络应用程序,允许用户在文本区域中输入文本,然后按保存。

然后将文本以 xml clob 的形式保存到数据库中,并通过 Web 应用程序以 html 形式显示回用户。

特殊字符存在一些问题。

从文本区域保存到 xml 时,需要对以下字符进行转义: & < > " '

换行符将正确保存到 xml 中,但是,当它们显示为 html 时,换行符没有任何影响。

这两个问题都可以通过以下方式解决。

在另存为 XML 之前:

//get string from text area
string = string.replaceAll("&", "&amp;"); 
string = string.replaceAll("<", "&lt;"); 
string = string.replaceAll(">", "&gt;"); 
string = string.replaceAll(""", "&quot;");
string = string.replaceAll("'", "&apos;");

从 xml 获取文本后:

//get text from xml
string = string.replaceAll("n", "<br/>"); 

此解决方案适用于我想要实现的目标。

问题是,为了

不重新发明轮子或优雅,是否有更好的或现有的解决方案来解决此类问题?

你走在正确的轨道上。 通常,当您创建JEE Web应用程序时,您将一个名为ServletUtilities的类中组合了一个处理此类常规转换的类。 在其中,您可以调用一个静态方法,例如"filter",并向其传递一个 String 参数。 所以,你可以有这样的东西:

public class ServletUtilities
{
  public static String filter(String input)
  {
     if(!hasSpecialChars(input))
     {
       StringBuffer filtered = new StringBuffer(input.length());
       char c;
       for(int i=0; i < input.length(); i++)
       {
         c = input.charAt(i);
         switch(c)
         {
           case '<' : filtered.append("&lt;");break;
           case '>' : filtered.append("&gt;");break;
           case '"' : filtered.append("&quot;");break;
           case '&' : filtered.append("&amp;");break;
           //This next one is optional for the new line
           case 'n' : filtered.append("<br>");break;
           default: filtered.append(c);
         }
       }
       return(filtered.toString()); 
     }
  }
  private static Boolean hasSpecialChars(String input)
  {
    boolean flag = false;
    if((input != null) && (input.length() > 0))
    {
       char c;
       for(int i=0; i < input.length(); i++)
       {
         c = input.charAt(i);
         switch(c)
         {
           case '<' : flag = true;break;
           case '>' : flag = true;break;
           case '"' : flag = true;break;
           case '&' : flag = true;break;
           //This next one is optional for the new line
           case 'n' : flag = true;break;
         }
       }
    }
    return flag;
  }
}

希望这有帮助。

最新更新