2012-10-12 2 views
-1

XML 파일로 변환하기 전에 XML 문자열을 이스케이프해야합니다. 나는 이런 식으로 작업을 수행합니다XML 문자열 바꾸는 방법?

자바 코드 :

public static final String[][] XML_ENTITIES = { 
    {"&","&amp;"},{">","&gt;"},{"<","&lt;","'","&apos;","\"","&quot;"} 
}; 

public static String escape(String str){ 
    for(int i=0;i<XML_ENTITIES.length;i++){ 
     String name = XML_ENTITIES[i][0]; 
     String value = XML_ENTITIES[i][1]; 
     int idx = str.indexOf(name); 
     if(idx > -1){ 
      str = str.replace(name, value); 
     } 
    } 
    return str; 
} 

그것은 잘 작동하지만 어떤 경우에 실패합니다.

예 :

escape(">>,,a,a<<") 

출력 :

&gt;&gt;,,a,a&lt;&lt; 

실패 케이스 :

escape("&amp;>,,a,a<<") 

출력 :

&amp;amp;&gt;,,a,a&lt;&lt; 

xml 문자열에 &amp;이 포함되어 있으면 문자열에서 & 문자를 이스케이프 처리 할 필요가 없습니다. 만약 내가 unescape 문자열을 탈출하면 잘 작동합니다. 이스케이프 처리없이 어떻게 할 수 있습니까?

+2

당신은'org.apache.commons.lang.StringEscapeUtils.escapeXml()'을 보았습니까? – user1516873

+0

@ user1516873 이것은 답변 가치가 있습니다. –

+0

두 번째 예제가 올바르게 나에게 보이지 않게 보입니다. 부분적으로 이스케이프 된 문자열을 처리하려면 문자열의 이스케이프 처리를 해제 한 다음에 이스케이프 메서드를 이스케이프 처리되지 않은 문자열에 적용하는 것이 좋습니다. –

답변

0
public static final String[][] XML_ENTITIES = { 
    {"&(?!amp;)","&amp;"},{">","&gt;"},{"<","&lt;","'","&apos;","\"","&quot;"} 
}; 

public static String escape(String str){ 
    for(int i=0;i<XML_ENTITIES.length;i++){ 
     String name = XML_ENTITIES[i][0]; 
     String value = XML_ENTITIES[i][1]; 
     int idx = str.indexOf(name); 
     if(idx > -1){ 
      str = str.replaceAll(name, value); 
     } 
    } 
    return str; 
} 
+0

replaceAll과 regEx를 사용하여 & amp; –

관련 문제