java转义xml中的多余尖括号

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字符串了。

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

时间: 2024-10-24 05:20:39

java转义xml中的多余尖括号的相关文章

JAVA web.xml中引用多个XML

web.xml里加<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext-security.xml /WEB-INF/applicationContext-hibernate.xml/WEB-INF/webservice-outbound.xml</param-value></context-p

用MathType编辑上下尖括号有什么技巧

在MathType中,同一个数学符号可以进行各种变换方向的使用,就比如箭头符号,任意方向都可以使用,这也是很常见的.数学中的符号能够根据各种特殊需要进行灵活使用,除了箭头符号之外,其它符号也可以,比如尖括号.尖括号不仅可以可以在常规的情况下横着使用,也可以竖着使用.下面本MathType教程就来介绍MathType上下尖括号怎么编辑. 具体操作步骤如下: 1.打开MathType公式编辑器,进入到公式编辑界面,进行相应的的公式编辑. 2.需要使用上下尖括号的地方,用鼠标点击MathType菜单中

保留多行文本框的换行与空格样式,并转义HTML标记的尖括号

本文采用JavaScript进行演示,这并不影响你在项目中的实际应用,因为我提供的思路,你可以轻易地把它用你自己的语言进行实现,这通常是后台语言,而且下面提供的正则表达式你几乎可以完全照搬,因为正则表达式是通用的. 作者:WebFlash出处:http://webflash.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 一.需求来源 假如在你的一个网站项目中,你需要提供一个留言入口,你

log4j的1.2.15版本,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......

在动态网站工程中,添加了Pom依赖,当添加log4j的1.2.15版本依赖时,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......,如下图 这是因为 https://maven-repository.dev.java.net/nonav/repository 这个域名已经无法解析了. 而

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

XML中不能识别&amp;符号, 需要转义吗?

"&"在XML中是具有特殊含义的,是转义字符的前缀,如果要想用这个字符就需要转义.遇到"&"就替换成"&amp"就好了; xml所有转义符 和 & & 大于 > &gt ; 小于 < < 空格   单引号 ' &apos; 双引号 " " 井号 # #

Java使用XPath查询XML中的元素

使用java中的xpath语法查询xml中元素 1.查询的xml文件为student.xml文件 <?xml version="1.0" encoding="UTF-8" ?><students> <student class="1201">  <name>李小离</name>  <sex>男</sex>  <age>25</age> &l

include包含头文件的语句中,双引号和尖括号的区别

include包含头文件的语句中,双引号和尖括号的区别 #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索 #incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中.被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样. #include 指令有两种使用形式 #incl

(转)XML中必须进行转义的字符

场景:在工作中接触到很多xml文件,为了更好的操作这些文件,所有很有必要熟知xml文件的相关语义. 1 引入 编写XML代码经常遗漏的常识: XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符,则必须分别写成"&","<",">"再写入文件中.例如,如果在XML文档中使用类似&q