在XML中,有一些符号作为XML 的标记符号,一些特定情况下,属性值必须带有这些特殊符号。 下面主要是讲解一些常用的特殊符号的处理

例一: 双引号的使用。

双引号作为XML 属性值的开始结束符号,因此无法在值中直接使用"". 处理方式可以分为两种。

a: 属性值中没有'(单引号) ,那么可以用单引号'' 作为属性值的开始结束符号

<add key="IPhone" value="apple"/>  ...属性值为 ("apple").

解决:  <add key="IPhone" value=’"apple"‘/>

b: 属性值中有'(单引号) ,也有双引号。 如...属性值为 ("'apple").

<add key="IPhone" value="&quot;&apos;apple&quot;"/>

下表为 XML 标记使用的字符列出了五种内置实体。

 
实体 实体引用 含义

lt

&lt;

<(小于号)

gt

&gt;

>(大于号)

amp

&amp;

&(“and”符)

apos

&apos;

'(撇号或单引号)

quot

&quot;

"(双引号)

如果字符可能会使 XML 分析器错误地解释文档结构,请使用实体,而不要键入字符。&apos; 和 &quot; 实体引用最常用在属性值中。

在做WebServices时为了实现复杂数据的传输,我们经常会采用XML格式的字符串来传送,这主要是由于XML具有存取数据,跨平台及跨语言等好处。请看下面例子:

  public String getAllNewSpace() { 
  StringBuffer toClient = new StringBuffer("<root>"); 
  if (null != dataset) {
  while (dataset.next()) {
  toClient.append("<User>"); 
  toClient.append("<UserName>"); //<![CDATA[
  toClient.append(dataset.getString(1)); 
  toClient.append("</UserName>"); //]]
  toClient.append("<UserId>"); 
  toClient.append(dataset.getString(2)); 
  toClient.append("</UserId>"); 
  toClient.append("</User>"); 
  }
  }
  toClient.append("</root>"); 
  return toClient.toString(); 
  }

  如果<UserName>节点中含有“&”,“<”,“>”等字符时,解释此XML时会出错。

  可以有两种解决方法:

  一、 通过Xml Document对象得到XML字符串返回给客户端,不能直接把XmlDocument返回给客户端,因为Java中的Xml Document对象,别的语言是无法正确解释的,我们只能返回XML 字符串:

public String getAllNewSpace() { 
  Document document = DocumentHelper.createDocument(); 
  Element root=document.addElement("root"); 
  if (null != dataset) {
  while (dataset.next()) {
  Element user=root.addElement("User"); 
  Element userName=user.addElement("UserName"); 
  userName.setText(dataset.getString(1)); 
  Element userId=user.addElement("UserId"); 
  userId.setText (dataset.getString(2)); 
  }
  }
  return document.asXML(); 
  }

  二、 给XML 字符串添加DTD验证:在节点值部份添加“<![CDATA[ ]]”

  public String getAllNewSpace() { 
  StringBuffer toClient = new StringBuffer("<root>"); 
  if (null != dataset) {
  while (dataset.next()) {
  toClient.append("<User>"); 
  toClient.append("<UserName><![CDATA["); 
  toClient.append(dataset.getString(1)); 
  toClient.append("]]</UserName>"); 
  toClient.append("<UserId>"); 
  toClient.append(dataset.getString(2)); 
  toClient.append("</UserId>"); 
  toClient.append("</User>"); 
  }
  }
  toClient.append("</root>"); 
  return toClient.toString(); 
  }

写ajax时最容易输出xml的就是拼凑字符串拉

如何处理特殊字符串是个问题

参见以下两种方法

http://webdev.csdn.net/page/96ba432b-af4a-412c-9684-2935c617faeb

对如我而言,我需要在html页面上显示的,我只需要把特殊字符串转为实体字符

&lt; < 小于号
&gt; > 大于号
&amp; &
&apos; ' 单引号
&quot; " 双引号

很显然 struts标签 bean:write 的属性 filter="true" 也是实现此功能

打开源代码,轻松找到这个方法 org.apache.struts.util。ResponseUtils.filter(String value)

具体实现如下:

public static String filter(String value)
    {
        if(value == null)
            return null;
        char content[] = new char[value.length()];
        value.getChars(0, value.length(), content, 0);
        StringBuffer result = new StringBuffer(content.length + 50);
        for(int i = 0; i < content.length; i++)
            switch(content[i])
            {
            case 60: // '<'
                result.append("&lt;");
                break;

case 62: // '>'
                result.append("&gt;");
                break;

case 38: // '&'
                result.append("&amp;");
                break;

case 34: // '"'
                result.append("&quot;");
                break;

case 39: // '\''
                result.append("'");
                break;

default:
                result.append(content[i]);
                break;
            }

return result.toString();
    }

当然有时候写javascript还需要平凑html,然后用一句 obj.innerHTML=展示你的页面

这时候也需要处理特殊字符。

我也仿照bean:write标签写很土的一个js版本的filter方法吧

function  filter(v)
    {
        if(v == null||v=="")
            return "";
      var result="";
        for(var i = 0; i < v.length; i++)
            switch(v.charAt(i))
            {
            case "<": result+="&lt;";break;
            case ">": result+="&gt;"; break;
            case "&":result+="&amp;";break;
            case "\"": result+="&quot;";break;
            case "'": result+="'";break;
            default:result+=v.charAt(i);break;
            }
        return result;
}

如果用到prototype框架里面也有个方法

escapeHTML: function() {
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  }

转换回来的对应方法为unescapeHTML

例如

var temp="<>/";

alert(temp.escapeHTML());

XML 特殊字符处理的更多相关文章

  1. XML特殊字符处理

    XML共有5个特殊字符,分别为:&<>"' 如果XML文件中需要包含如上5个特殊字符,有两种方式: 1.将包含特殊字符的字符串放在<![CDATA[]]>中 ...

  2. XML 特殊字符处理和 CDATA

    在处理XML数据时,特殊字符要特殊处理,不能和节点字符混淆. 所有 XML 文档中的文本均会被解析器解析. 只有 CDATA 区段(CDATA section)中的文本会被解析器忽略. PCDATA ...

  3. xml特殊字符处理 如&

     写了个request2XML的方法,每当数据中有'<'.'&'符号时,封装的XML就无法解析.发现了XML里的CDATA属性,问题迎刃而解!在XML文档中的所有文本都会被解析器解析 ...

  4. 【转】XML 特殊字符处理

    from: http://gdutlzh.blog.163.com/blog/static/164746951201222934328455/ 1. 在XML文件中,如果内容包含一些特殊字符会导致XM ...

  5. XML 特殊字符

    XML转义字符 以下为XML标志符的数字和字符串转义符 "     (" 或 ") '     (' 或 &apos;) &     (& 或 & ...

  6. XMl特殊字符转换参考

    参考链接:https://blog.csdn.net/goon_star/article/details/49636505 处理SVG Text元素不能正确显示特殊字符 特殊符号 命名实体 十进制编码 ...

  7. android xml特殊字符

    @ 对应 @ : 对应 :   对应 空格 对应 空格 ! 对应 ! " 对应 " # 对应 # $ 对应 $ % 对应 % & 对应 & ' 对应 ´ ( 对应 ...

  8. 处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>

    处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]> // xml 转义特殊字符 如&'" <![CDATA[&quo ...

  9. XML标签

    SQL标签库提供了创建和操作XML文档的标签. 引入语法:<%@ taglib prefix="x" uri="http://java.sun.com/jsp/js ...

随机推荐

  1. Unable to create new web application

      When I try to create a new web application, it just shows message as 'This should'nt take too long ...

  2. 有用的java工具

    1.Jsoup html页面解析 2.FastJson java中json处理工具,类似于gson 3.jodd 类似于apache commons的一些常用工具集 4.Selenium IDE we ...

  3. brew install Jenkins

    Chens-MacBook-Pro:Downloads chenqing$ brew install jenkins ==> Downloading http://mirrors.jenkins ...

  4. android布局 - fill_parent/match_paren/wrap_content的区别

    三个属性都用来适应视图的水平或垂直大小,一个以视图的内容或尺寸为基础的布局比精确地指定视图范围更加方便. 1)fill_parent 设置一个构件的布局为fill_parent将强制性地使构件扩展,以 ...

  5. jQuery 用each后添加click

    mydd = $('.plist'); mydd.each(function(i){ $(this).click(function(){ mydl.eq(i).hide("slow" ...

  6. 解决 IE6 背景缓存

    解决 IE6 背景缓存 <!--[if IE 6]><script type="text/javascript">document.execCommand( ...

  7. CSS 之 样式优先级机制

    多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 1.一般情况下,优先级从低到高,如下: 浏览器缺省(即浏览器默认) →(外部样 ...

  8. 推荐五星级C语言学习网站

    www.cprogrammingexpert.com (此网站,配合了大量动画,每一行代码,配合一副图片) 下面截取了部分的gif动画,大家可以认真看看, 相信作者花了很多心血,去制作这些动画. sc ...

  9. 很赞的idea教程

    感谢: http://pan.baidu.com/s/1dDEaVxn

  10. Java 基础【15】 压缩与解压缩

    Java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类. 还包括使用 DEFLATE 压缩算法(用于 ZIP 和 GZIP 文件格式)对数据进行压缩和解压缩的类. 依赖 Jd ...