XML中的无效字符问题 我要经常向XML数据文件中存入数据,但是有的时候我存入的数据含有一些XML不认可的代码,例如:&<>等等等最后我用java 读取使用时这些xml的时候程序就会报错!我现在的xml编码为gb2312格式。谢谢各位。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也碰到同样的问题等待高手中ing... 这个问题最烦人了webservice这样的协议就是通过xml来传输数据的,不过我也懒得研究它是怎么处理xml数据我一般会考虑采用转化的方法,比如将字符串转换为不含特殊标记的方法等不过效果都不好,问题不在于是否能转化为完全不含特殊标记的文字,而是这样的转化没有标准,解析方也必须要知道怎样还原,这样xml的灵活性就没了 xml中不能包括"'&等符号,非要传的话,可以进行转换,比如& --> & <?xml version = '1.0' encoding = 'gb2312'?> <ROWSET> <a>f@126.com</a></ROWSET>以上是我在数据库中读取并产生的数据,再从xml中读取时就无法读取。xml中的非法字符类型还有很多。请帮忙看看有什么好解决方法。谢谢。 你看下你保存的文件格式,如果是UTF-8的格式,向@这样的字符是要转义字符转一下的。你看看,xml是不可能读不了,主要是使用不当 请问如何过滤掉xml中的非法字符,xml编码为gb2312。谢谢。csdn中把xml中的非法字符过滤掉了。如下:<?xml version = '1.0' encoding = 'gb2312'?> <ROWSET> <a>f(此处有不可见字符)@126.com</a></ROWSET>请问大家如何做。谢谢各位了。急啊。 &<>这样的字符是要处理的。可以有两种解决方法:一、 通过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[]]> <![CDATA[也不可以完全解决这样的问题你可以试试看,如果文本里含有[[等符号,就不可以了 <![CDATA[无效字符]]>从IBTIS书里学到的一招。 还有一种是对字符串加密解密也可以实现 Decoder “还有一种是对字符串加密解密也可以实现 Decoder”这个我前面说过,但问题是你的加密方法(其实是字符串转换方法)并没有规则,这样其他程序或地方在用的时候就势必要知道你的这个算法。xml的通用性一下子就没有了我没有时间研究WebService或者Soap是怎么处理这块的。各位如果有时间的可以去看看。 “<![CDATA[无效字符]]>从IBTIS书里学到的一招。”我晕这个data域不是万能的你以为放到这里面就没事了首先它只能放到data部位其次,这里的数据不可以包含[[ ]]等字符有一些不可见字符也会出问题 首先谢谢大家的帮组,我试了一下,还是不行。添加上那个<![CDATA[无效字符]]>正常的数据也插入到目的端也成了小方框了。我是用OracleXMLQuery方法产生数据的。大家有没有用过的经验,在产生xml文件前就把不符合xml格式的数据过滤掉呢?谢谢各位。谢谢。 如果是在后台生成的话可以直接用jdom生成,那样的话就不存在特殊字符的问题了。jdom会将特殊字符转换掉。 baidu 上搜出来的帖子xml 1.0 对字符范围有要求,详见 http://www.w3.org/TR/REC-xml/#charsets比如在xml加入 <node>(一个音乐符号)</node> IE可以正常显示,但左下角会出现警告图标,提示发现无效字符。 java可以实现监听文件夹内的文件变动吗 新人快帮我谢谢给分解决马上结贴 求高手帮忙代码简化! swing 中对布局管理器的理解 【救命】 消息群发 求救! 匿名内部类调用外部对像的问题 . 如果我想将一个函数,或一个类的名称(当作参数)传入一个函数,然后在该函数中对传入的参数进行处理,这样可行吗? HTTP Status 404 - /Test/userLogin.action 适合做程序员吗?开始有转行的冲动了! 怎样用udp传送对象
等待高手中ing...
webservice这样的协议就是通过xml来传输数据的,不过我也懒得研究它是怎么处理xml数据我一般会考虑采用转化的方法,比如将字符串转换为不含特殊标记的方法等
不过效果都不好,问题不在于是否能转化为完全不含特殊标记的文字,而是这样的转化没有标准,解析方也必须要知道怎样还原,这样xml的灵活性就没了
非要传的话,可以进行转换,比如& --> &
<ROWSET>
<a>f@126.com</a>
</ROWSET>
以上是我在数据库中读取并产生的数据,再从xml中读取时就无法读取。xml中的非法字符类型还有很多。请帮忙看看有什么好解决方法。谢谢。
<?xml version = '1.0' encoding = 'gb2312'?>
<ROWSET>
<a>f(此处有不可见字符)@126.com</a>
</ROWSET>
请问大家如何做。谢谢各位了。急啊。
可以有两种解决方法:
一、 通过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[]]>
你可以试试看,如果文本里含有[[等符号,就不可以了
无效字符
]]>
从IBTIS书里学到的一招。
这个我前面说过,但问题是你的加密方法(其实是字符串转换方法)并没有规则,这样其他程序或地方在用的时候就势必要知道你的这个算法。xml的通用性一下子就没有了
我没有时间研究WebService或者Soap是怎么处理这块的。各位如果有时间的可以去看看。
无效字符
]]>
从IBTIS书里学到的一招。
”我晕
这个data域不是万能的
你以为放到这里面就没事了
首先它只能放到data部位
其次,这里的数据不可以包含[[ ]]等字符
有一些不可见字符也会出问题
谢谢各位。谢谢。
jdom会将特殊字符转换掉。