標籤:xml java 轉義角括弧
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("<", "<").replace(">", ">"); //轉換回來 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><三國<><演><演>義</name><price>4<>5</price><author>羅貫中</author></book></books>
這樣就可以解析這個xml字串了。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
java轉義xml中的多餘角括弧