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

版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM