2008. 8. 25. 16:34
XML에서는 아래 5가지의 특수문자를 사전정의하고 있다.
만약, 별도의 XML API를 사용하지 않는다면 해당 캐릭터가 String으로 XML의 value 또는 context text로 포함되어 있을 경우 XML 파서에서는 에러를 리턴하게 된다. 따라서 XML Write할 때 위의 특수문자를 Code로 바꾸어 주어야 한다.
다음은 Java를 이용하여 해당 문자를 Code로 바꾸어주는 TDD 소스이다.
위의 testToXMLString() 메소드의 구현 부분을 static 메소드를 사용하여 구현해 주면 된다. 예를 들면 다음과 같다.
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);
}
}
* 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;
}
}
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;
}
}