XML에서는 아래 5가지의 특수문자를 사전정의하고 있다.
Name | Character | Code |
---|---|---|
quot | " | " |
amp | & | & |
apos | ' | ' |
lt | < | < |
gt | > | > |
만약, 별도의 XML API를 사용하지 않는다면 해당 캐릭터가 String으로 XML의 value 또는 context text로 포함되어 있을 경우 XML 파서에서는 에러를 리턴하게 된다. 따라서 XML Write할 때 위의 특수문자를 Code로 바꾸어 주어야 한다.
다음은 Java를 이용하여 해당 문자를 Code로 바꾸어주는 TDD 소스이다.
/**
* XML에서 사용할 수 없는 특수문자를 변경해 준다.
*/
package com.mediachorus.pepbox.encoding;
import java.nio.CharBuffer;
import junit.framework.TestCase;
/**
* @author SangHyup LEE
* @version 1.0
*
*/
public class ToXMLStringTest extends TestCase {
public void testToXMLString() {
String name = "\"한&글'을<포>함";
CharBuffer cb = CharBuffer.wrap(name);
String xmlString = "";
while ( cb.hasRemaining() ) {
// System.out.println(cb.get() + " ");
char tempChar = cb.get();
if ( tempChar == '"' ) {
xmlString += """;
} else if ( tempChar == '&' ) {
xmlString += "&";
} else if ( tempChar == '\'' ) {
xmlString += "'";
} else if ( tempChar == '<' ) {
xmlString += "<";
} else if ( tempChar == '>' ) {
xmlString += ">";
} else {
xmlString += tempChar;
}
}
// System.out.println("xmlString : " + xmlString);
assertEquals(""한&글'을<포>함", xmlString);
}
}
위의 testToXMLString() 메소드의 구현 부분을 static 메소드를 사용하여 구현해 주면 된다. 예를 들면 다음과 같다.
public class ConvertUtil {
public static String toXMLString(String input) {
String xmlString = "";
CharBuffer cb = CharBuffer.wrap(input);
while ( cb.hasRemaining() ) {
char tempChar = cb.get();
if ( tempChar == '"' ) {
xmlString += """;
} else if ( tempChar == '&' ) {
xmlString += "&";
} else if ( tempChar == '\'' ) {
xmlString += "'";
} else if ( tempChar == '<' ) {
xmlString += "<";
} else if ( tempChar == '>' ) {
xmlString += ">";
} else {
xmlString += tempChar;
}
}
return xmlString;
}
}
댓글 없음:
댓글 쓰기