解析XML文件时,无效的XML 字符 (Unicode: 0x0)异常处理

String result=new String(rebody,"utf-8");//接收的xml报文

char[] c = new char[result.length()];
for(int i=0;i<c.length;i++){
    c[i] = result.charAt(i);
    if(c[i] > 0xFFFD){
        c[i] = ' ';
    }else if(c[i] <= 0x20 && c[i] != '\t' && c[i] != '\r'){
       c[i] = ' ';
    }
}
result = new String(c);

接着就可以解析result了

问题描述:
 当我们用
byte[] info ;
 DocumentHelper.parseText(new String(info));
将一个字节数组转成字符串再转成Document(XML格式)时,常常会遇到上述异常。
 特别是当字符串有加、解密,或编码等情况时。

 原因:
 从异常来看,很明显是因为字节数组中存在 Unicode: 0x0,而这个字节在Xml中被认为是非法字符。

 对于一些经过编码或加、解密的字符串中,很容易会出现这个 0x0,
特别是在加、解密中,经常会涉及到字符填充,而填充物通常是 0x0,
 需对于0x00-0x20 都会引起一定的问题,又因为这些字符不可见,因此用通常的编辑器进行编辑的时候找不到问题所在。
 而在转成String后也觉察不到任何异常。
 所以在转成XML格式时要对字符串进行检测:
*  Verify that no character has a hex value greater than 0xFFFD, or less than 0x20.
 * Check that the character is not equal to the tab ("t), the newline ("n), the carriage return ("r), or is an invalid XML character below the range of 0x20. If any of these characters occur, an exception is thrown.

参见Customized XML Writer Creation | Microsoft Docs

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用JavaScript内置的XML解析器DOMParser来解析XML文件XML格式字符串。下面是一个示例代码: ```javascript // 定义一个XML格式的字符串 var xmlString = '<root><person><name>张三</name><age>18</age></person></root>'; // 创建一个DOMParser对象 var parser = new DOMParser(); // 解析XML字符串 var xmlDoc = parser.parseFromString(xmlString, 'text/xml'); // 获取XML文档中的元素 var name = xmlDoc.getElementsByTagName('name')[0].childNodes[0].nodeValue; var age = xmlDoc.getElementsByTagName('age')[0].childNodes[0].nodeValue; // 打印结果 console.log('name:', name); console.log('age:', age); ``` 在上面的代码中,我们首先定义了一个XML格式的字符串,然后创建了一个DOMParser对象,使用parseFromString方法来解析XML字符串,最后从解析后的文档中获取元素并打印结果。 如果要解析XML文件,可以使用XMLHttpRequest对象来获取XML文件内容,然后再使用DOMParser解析。具体代码请参考下面的示例: ```javascript // 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 发送GET请求获取XML文件内容 xhr.open('GET', 'example.xml', true); xhr.send(); // 监听XML文件加载完成事件 xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { // 获取XML文件内容 var xmlString = xhr.responseText; // 创建DOMParser对象 var parser = new DOMParser(); // 解析XML字符串 var xmlDoc = parser.parseFromString(xmlString, 'text/xml'); // 获取XML文档中的元素 var name = xmlDoc.getElementsByTagName('name')[0].childNodes[0].nodeValue; var age = xmlDoc.getElementsByTagName('age')[0].childNodes[0].nodeValue; // 打印结果 console.log('name:', name); console.log('age:', age); } }; ``` 在上面的代码中,我们创建了一个XMLHttpRequest对象,使用GET请求获取XML文件内容,然后使用DOMParser解析XML字符串,最后从解析后的文档中获取元素并打印结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值