반응형
특수문자 |
변환문자 |
' |
' |
& |
& |
< |
< |
> |
&qt; |
" |
" |
<표. 특수문자 변환>
2편에서는 특수문자가 있는 XML파일을 파싱하는 방법에 대해서 알아보도록 하겠습니다.
위의 표는 특수문자와 xml에서 읽을 수 있는 문자를 대응한 표 입니다.
변환문자가 xml에서 읽을 수 있는 문자를 나타냅니다.
파싱 프로그램을 만들고 테스트하는 도중 빨간 메시지들이 우루루 나타나서 당황했던 적이 있습니다.
특수문자가 들어간 xml파일은 유효하지 않은 xml파일입니다. 그래서 이 특수문자를 없애줘야하는데요.
보통 CDATA를 삽입하는 방법들을 소개하는 글이 많았고, 아래와 같은 방법을 알려주는 곳도 많이 있었습니다.
다만, 제가 정확히 원하는 방식에 대한 글이 없어 혹시 저같은 상황을 해결해야하는 분들이 계실까 싶어 포스팅해봅니다.
파일명: test.xml
name="public Box boxing(T t)"/function>
▶ function태그를 보시면 <T>에서 문제가 생길 것이다라는 걸 알 수 있습니다. <T가 태그의 <과 겹치기 때문이죠. 그래서 <function 태그를 시작했는데 /function> 태그를 닫지 않고 또 새로운 태그를 시작해버리니 형식에 맞지 않아 오류가 발생합니다.
String xml = null; try { File inputFile = new File(“C:\users\test.xml”); File outFile = new File(intputFile+”.temp”); FileInputStream inputStream = new FileInputStream(intputFile); FileOutputStream outputStream = new FileOutputStream(outFile);; BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream)); while((xml = br.readLine()) != null) { xml = xml.replaceAll("<T", "<T"); // <를 <로 변환 bw.write(xml + "\r\n"); bw.flush(); } bw.close(); br.close(); inputFile.delete(); outFile.renameTo(inputFile); } catch(Exception e) { e.printStackTrace(); }
▶ < 문자가 < 로 바뀐 것을 볼 수 있습니다. 위와 같은 형태의 xml파일은 파싱이 가능합니다. xml파일에 있던 특수문자가 치환되어 읽을 수 있는 형태가 되었기 때문입니다.;
그런데 약간 부족합니다. 만약 <T 가 아니라 그냥 <나 & 가 들어간 xml파일을 파싱하고 싶다면 어떻게 해야할까요 ? 사실 이 포스팅의 예제보다는 <를 치환하는 부분이 더 맞는 방법이라고 생각합니다.
&는 위와 같이 구현해도 이상이 없습니다. 다만 < 를 치환하고 싶어 <T대신 <를 사용하면 tag에 있는 < 까지 바뀌게 되겠죠.
아래와 같이 말입니다.
<
function
name="public <T> Box<T> boxing(T t)" />;
이렇게 치환이 되면 파싱이 안됩니다. xml파일 구조가 깨졌기 때문이죠.
프롤로그에서는 콘텐츠가 허용되지 않습니다.
이런 메시지가 나타나네요. 태그의 < 를 제외한 나머지를 파싱하고 싶을땐 어떻게 해야하는지는 다음의 포스팅을 참고해주시길 바랍니다.
반응형
'IT > Language' 카테고리의 다른 글
JAVA - 오라클 DB에 쿼리 날리기( INSERT, DELETE, UPDATE) (0) | 2017.12.07 |
---|---|
JAVA - 오라클 트랜잭션(Transaction) 명령어 - COMMIT, ROLLBACK, SAVEPOINT (0) | 2017.12.06 |
Java DOM파서 3편 - "<"를 가진 xml파일 파싱하기(특수문자 치환) (0) | 2017.12.05 |
오라클 시퀀스(Sequence) 사용 및 .NEXTVAL 초기화 (0) | 2017.12.03 |
Java DOM파서 1편 - 여러 형태의 XML파일 파싱하기 (0) | 2017.11.30 |