Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung der Lösung, wenn beim Parsen von XML-Strings das Symbol & < > vorhanden ist

Ausführliche Erklärung der Lösung, wenn beim Parsen von XML-Strings das Symbol & < > vorhanden ist

黄舟
黄舟Original
2017-04-01 13:37:302711Durchsuche

问题产生:

       在接口调用得出一个xml字符串,一直报错

The entityname must immediately follow the &#39;&&#39; in the entity reference

经查发现  xml的内容里存在有  &符号  而 通过dom4j读取时  会发生错误

在xml中 “&”“140e4624dfe614c0cb4364a4937e6ff2”这样的标签存放在内容里是不合法的,会经常出问题。

下面找到解决方法:实测   替换  &   是可行的。   

public void chartReplace(){
        String str2 = "<logentry revision=&#39;1&#39;>" +
                "<msg>In this comment, I fixed a <bug>, and <added> file1&&file2.</msg>" +
                "</logentry>";
        System.out.println("original string: "+str2);
         
        //替换“&”:$1表示与(<msg>.*)的匹配子序列;$4表示与(.*</msg>)匹配的。
                     //&(?!amp;)表示匹配&而且后面不是amp;的字符串
        //"$1&amp;$3$4"得到的结果就是替换了<msg></msg>中的“&”为“&amp;”
        //由于每次只能替换掉一个“&”,所以循环执行替换,直到替换后与替换前的字符串相等。
        String str1 = "";
        while(!str2.equals(str1)){
            str1 = str2;
            str2 = str1.replaceAll("(<msg>.*)(&(?!amp;))(.*</msg>)", "$1&amp;$3");
        }
        System.out.println("firstly replace \"&\": "+str2);
         
        //替换“<”
        str1 = "";
        while(!str2.equals(str1)){
            str1 = str2;
            str2 = str1.replaceAll("(<msg>.*)(<)(.*</msg>)", "$1&lt;$3");
        }
        System.out.println("then replace \"<\": "+str2);
         
        //替换“<”
        str1 = "";
        while(!str2.equals(str1)){
            str1 = str2;
            str2 = str1.replaceAll("(<msg>.*)(>)(.*</msg>)", "$1&gt;$3");
        }
        System.out.println("finally replace \">\": "+str2);
    }

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der Lösung, wenn beim Parsen von XML-Strings das Symbol & < > vorhanden ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn