xml中的敏感字符是尖括号,如果xml的值中含有尖括号,那么在解析的时候就会报错,如:

<?xml version="1.0" encoding="UTF-8"?><books><book><id>1</id><name><三国<><演><演>义</name><price>4<>5</price><author>罗贯中</author></book></books>

需要先对这些xml文件进行处理。

我的一个大概思路是这样的:

先利用正则找出所有的标签,再把标签存入一个ArrayList中,然后对照arraylist中的值,把标签两端的尖括号换成标记的字符串,然后转义掉剩余的所有尖括号,最后再把标记字符串转换成尖括号即可。

代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class FilterXMLUtil {
/**
* 传入一个xml字符串,将其中的多余的<>转义后返回
* @param xmlStr
* @return
*/
public static String filterIllegalityChar(String xmlStr) {
//用来存放标签的集合
List<String> tags = new ArrayList<String>();
//去掉最前面的两个尖括号
xmlStr = xmlStr.replace("<?xml", "?xml").replace("\"UTF-8\"?>", "\"UTF-8\"?");
//通过正则找到所有的标签
Pattern tag = Pattern.compile("<([a-zA-Z0-9]+)>");
Matcher mc = tag.matcher(xmlStr);
while(mc.find()){
//匹配成功之后将之存入list中
tags.add(mc.group(1));
}
/**
* 临时替代符号
* <-----------> ^^
* >----------->~~
* </---------->##/
*/
for(int i = 0;i<tags.size();i++){
xmlStr = xmlStr.replaceAll("<" + tags.get(i) + ">",
"^^"+tags.get(i)+"~~").replaceAll("</"+tags.get(i)+">", "##/"+tags.get(i)+"~~");
}
//转义
xmlStr = xmlStr.replaceAll("<", "&lt;").replace(">", "&gt;");
//转换回来
xmlStr = xmlStr.replace("^^", "<").replace("~~", ">").replace("##/", "</").replace("?xml", "<?xml").replace("\"UTF-8\"?", "\"UTF-8\"?>");
return xmlStr;
}
}

输出:

<?xml version="1.0" encoding="UTF-8"?><books><book><id>1</id><name>&lt;三国&lt;&gt;&lt;演&gt;&lt;演&gt;义</name><price>4&lt;&gt;5</price><author>罗贯中</author></book></books>

这样就可以解析这个xml字符串了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. 安装Python环境时遇到的问题
  2. MySQL数据类型-decimal详解
  3. 基于C#和Asp.NET MVC开发GPS部标监控平台
  4. 【API】获取优酷视频信息接口
  5. mssql查询某个值存在某个表里的哪个字段的值里面
  6. JS中函数的基础知识
  7. vi编辑
  8. Asp.Net MVC 3【URLs, Routing,and Areas】续
  9. project facet java version 1.6 is not supported
  10. javascript第一课练习
  11. awk内引用shell变量【自己手动加精】
  12. nyoj222 整数中的1 数位DP
  13. 转 Postman访问Webapi的Get/Post/Put/Delte请求
  14. yzh的神仙题
  15. &lt;面向对象程序设计&gt;课程作业一
  16. Docker常用命令&lt;转&gt;
  17. python监控端口脚本[jkport2.0.py]
  18. centos7 配置ftp访问
  19. 10. JavaScript学习笔记——JSON
  20. firefox burp ssl证书配置

热门文章

  1. 制作PPT时,可能这些小习惯你需要注意
  2. ReactEurope Conf 参会感想
  3. Android LogCat 日志记录
  4. Qt创建窗体的过程
  5. $response-&gt;decoded_content; 和$response-&gt;content; 乱码问题
  6. 利用switch case 来运行咱们结婚吧
  7. bzoj1231
  8. 【Node】package.json
  9. HDU-1686 Oulipo
  10. 数据源加密-JDBC调用方式加密示例