为什么我们应该在解析java之前替换字符串xml中的字符

时间:2016-08-09 05:42:49

标签: java xml saxparser

我必须在使用SAX Parser解析xml之前使用以下代码。 但我无法得到字符串xml中某些字符替换的解释。

public class basic {
    public static void main(String[] args) {
        String xmlStr= some xml file;
        xmlStr= xmlStr.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
        xmlStr= xmlStr.replaceAll("\\+", "%2B");
       //Now some parsing mechanism using sax parser is continuing    
    }
}

编辑:             因为符号'+'表示按网址划分的sapces,第二行             // xmlStr = xmlStr.replaceAll(“\ +”,“%2B”)             是为了保护符号'+免于空间转换而写的。

        But still didn't understand the below line.
        //xmlStr= xmlStr.replaceAll("%(?![0-9a-fA-F]{2})","%25");
        what is the significance of '?', '{}' 

2 个答案:

答案 0 :(得分:1)

我想那是" xmlStr"这是XML文件的URI而不是XML文件的内容,因此代码操纵URI而不是操纵XML内容。操作URI通常是一个混乱的过程,但这看起来像是为了处理一些特殊需要而编写的特殊代码来修复格式错误的URI,除非有人输入错误的输入,否则不应该这样做。

答案 1 :(得分:0)

该行尝试使用其编码%替换%25符号,但前提是它后面没有两个十六进制字符。因此%25本身不会被编码。

  xmlStr= xmlStr.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
  • (?! ...)为负面预测(未替代),"不得跟随...
  • [0-9a-fA-F]{2}表示两个十六进制数字。
  • (? .... )不会像其他(...)一样被计为1美元,... $ 9

顺便说一下

xmlStr = xmlStr.replaceAll("\\+", "%2B");

可以用更快的非正则表达式版本编写:

xmlStr = xmlStr.replace("+", "%2B");