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

解决方案 »

  1.   

    我也碰到同样的问题
    等待高手中ing...
      

  2.   

    这个问题最烦人了
    webservice这样的协议就是通过xml来传输数据的,不过我也懒得研究它是怎么处理xml数据我一般会考虑采用转化的方法,比如将字符串转换为不含特殊标记的方法等
    不过效果都不好,问题不在于是否能转化为完全不含特殊标记的文字,而是这样的转化没有标准,解析方也必须要知道怎样还原,这样xml的灵活性就没了
      

  3.   

    xml中不能包括"'&等符号,
    非要传的话,可以进行转换,比如& --> &amp;
      

  4.   

    <?xml version = '1.0' encoding = 'gb2312'?>
     <ROWSET>   
     <a>f@126.com</a>
    </ROWSET>
    以上是我在数据库中读取并产生的数据,再从xml中读取时就无法读取。xml中的非法字符类型还有很多。请帮忙看看有什么好解决方法。谢谢。
      

  5.   

    你看下你保存的文件格式,如果是UTF-8的格式,向@这样的字符是要转义字符转一下的。你看看,xml是不可能读不了,主要是使用不当
      

  6.   

    请问如何过滤掉xml中的非法字符,xml编码为gb2312。谢谢。csdn中把xml中的非法字符过滤掉了。如下:
    <?xml version = '1.0' encoding = 'gb2312'?>
     <ROWSET>   
     <a>f(此处有不可见字符)@126.com</a>
    </ROWSET>
    请问大家如何做。谢谢各位了。急啊。
      

  7.   

    &<>这样的字符是要处理的。
    可以有两种解决方法:
    一、    通过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();
        }
      

  8.   

    对,用
    <![CDATA[]]>
      

  9.   

    <![CDATA[也不可以完全解决这样的问题
    你可以试试看,如果文本里含有[[等符号,就不可以了
      

  10.   

    <![CDATA[
    无效字符
    ]]>
    从IBTIS书里学到的一招。
      

  11.   

    还有一种是对字符串加密解密也可以实现 Decoder
      

  12.   

    “还有一种是对字符串加密解密也可以实现 Decoder”
    这个我前面说过,但问题是你的加密方法(其实是字符串转换方法)并没有规则,这样其他程序或地方在用的时候就势必要知道你的这个算法。xml的通用性一下子就没有了
    我没有时间研究WebService或者Soap是怎么处理这块的。各位如果有时间的可以去看看。
      

  13.   

    “<![CDATA[
    无效字符
    ]]>
    从IBTIS书里学到的一招。
    ”我晕
    这个data域不是万能的
    你以为放到这里面就没事了
    首先它只能放到data部位
    其次,这里的数据不可以包含[[ ]]等字符
    有一些不可见字符也会出问题
      

  14.   

    首先谢谢大家的帮组,我试了一下,还是不行。添加上那个<![CDATA[无效字符]]>正常的数据也插入到目的端也成了小方框了。我是用OracleXMLQuery方法产生数据的。大家有没有用过的经验,在产生xml文件前就把不符合xml格式的数据过滤掉呢?
    谢谢各位。谢谢。
      

  15.   

    如果是在后台生成的话可以直接用jdom生成,那样的话就不存在特殊字符的问题了。
    jdom会将特殊字符转换掉。
      

  16.   

    baidu 上搜出来的帖子xml 1.0 对字符范围有要求,详见  http://www.w3.org/TR/REC-xml/#charsets比如在xml加入 <node>&#14;(一个音乐符号)</node> IE可以正常显示,但左下角会出现警告图标,提示发现无效字符。