日期:2014-05-20  浏览次数:20680 次

XML中的无效字符问题
我要经常向XML数据文件中存入数据,但是有的时候我存入的数据含有一些XML不认可的代码,例如:& <> 等等。。。等最后我用java   读取使用时这些xml的时候程序就会报错!
我现在的xml编码为gb2312格式。谢谢各位。

------解决方案--------------------
这个问题最烦人了
webservice这样的协议就是通过xml来传输数据的,不过我也懒得研究它是怎么处理xml数据

我一般会考虑采用转化的方法,比如将字符串转换为不含特殊标记的方法等
不过效果都不好,问题不在于是否能转化为完全不含特殊标记的文字,而是这样的转化没有标准,解析方也必须要知道怎样还原,这样xml的灵活性就没了
------解决方案--------------------
xml中不能包括 " '&等符号,
非要传的话,可以进行转换,比如& --> &amp;
------解决方案--------------------
你看下你保存的文件格式,如果是UTF-8的格式,向@这样的字符是要转义字符转一下的。你看看,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();
}

------解决方案--------------------
对,用
<![CDATA[

]]>

------解决方案--------------------
“还有一种是对字符串加密解密也可以实现 Decoder”
这个我前面说过,但问题是你的加密方法(其实是字符串转换方法)并没有规则,这样其他程序或地方在用的时候就势必要知道你的这个算法。xml的通用性一下子就没有了


我没有时间研究WebService或者Soap是怎么处理这块的。各位如果有时间的可以去看看。
------解决方案--------------------
“ <![CDATA[
无效字符
]]>
从IBTIS书里学到的一招。


我晕
这个data域不是万能的
你以为放到这里面就没事了
首先它只能放到data部位
其次,这里的数据不可以包含[[ ]]等字符
有一些不可见字符也会出问题