遇到这一方面的问题是因为我试图把一个对象序列化之后存贮到xml文件中,然后从xml文件中读取字符串,并反序列化对象(hadoop mapreduce程序中通过JobConf向tasktracker传送对象)。有关序列化:
http://zzy1943.iteye.com/blog/634418
当我把序列化之后的数据直接存在xml中后,在解析xml时遇到解析错误,原因是有非法字符。在详细阅读xml的说明之后才发现:< > ' " &是不允许作为xml的PCDATA的。要使用这几个字符,必须要把他们替换为内建实体:
实体引用 字符
< <
> >
& &
" "
' '
所以,最直接的方法就是自己控制,在写入xml文件时把特殊字符转为实体引用,在读取的时候,再转回来。当然还有另外一个方法就是不把字符串当PCDATA,而是当成CDATA来使用(没有测试)。
用实体引用的方法太麻烦,而我的应用xml的格式不能自己规定,所以只好寻找另外的方法:BASE64编码。这是一种常用在网络传输数据的编码方式。把存在这些非法字符的字符编码成base64编码,就不会有这些字符了。最重要的是java api中提供了这种编码的编码器和解码器,位于sun.misc的BASE64Encoder和BASE64Decoder。这样就可以把序列化之后得到的字节流转化成字符串了。并且也可以存贮在xml文件中。
不过这两个类并不是sun的开放api,编译会有警告。
分享到:
相关推荐
解析XML特殊字符方法有二种 XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符XML特殊字符
xml中的一点特殊字符的转换 写xml常用的特殊字符
xml转javaBean,javaBean转xml,xml标签大小写问题,CDATA的生成,以及对xml特殊符号的处理
为了能正常输出XML格式的内容,必须要对不被XML允许的那些特殊字符进行转换。本文介绍的正是如何使用C#判断XML字符串是否含特殊字符并进行转换。 以下是几个特殊字符的对应实体。 < < 小于号 &...
// 下面的是通过解析xml字符串的 doc = DocumentHelper.parseText(xml); // 将字符串转为XML Element rootElt = doc.getRootElement(); // 获取根节点 System.out.println("根节点:"+ rootElt.getName()); // ...
主要介绍了mybatis xml中特殊字符处理及mybatis特殊符号处理技巧,mybatis特殊符号处理给大家介绍了两种写法,感兴趣的朋友一起看看吧
在xml中,有一些符号作为XML 的标记符号,一些特定情况下,属性值必须带有这些特殊符号。 下面主要是讲解一些常用的特殊符号的处理
XStream:Object与Xml字符串 互相转换 多个同名子节点以及节点属性的处理
在html和xml文件中,往往会因为以下特殊字符而导致文件解析出错,一般通过以下函数来处理。
在res/string.xml中添加特殊的字符,需用转移字符
网上有一个通用的转码组件,不仅可以转换javascript的,还可以转换html,xml等的特殊字符,许多帖子都转载了它。但是我对它进行了测试,发现有很多错误,或者是函数过期,或者是替换字符串写错,还有对javascript的...
对这些特殊字符只能使用转义序列。 XML转义字符 不合法的XML字符必须被替换为相应的实体。 如果在XML文档中使用类似"的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始
Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理,这里提供了解决办法及实例,大家可以参考下: 一、问题描述: 查询时,需要获取时间区间内的数据,如下: and l.CREATE_TIME >= #{startTime} and l....
js的XML解析器可以解析基本的XML文档、XML字符串,对于有特殊字符的XML文档还存在BUG(谷歌浏览器不能使用)
超全面javaweb第4天-_09_xml的特殊字符
特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%*%)和半角模糊查询(%*或*%)
Andorid String Resources中定义一些特殊字符串,Android string.xml和HTML的结合。
代码包含: EscapeUtil.java:特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%...
一个完整的xml编程指南,有了它xml文件文件编程完全不是问题