2025. 1. 2. 22:39ㆍLang/JAVA
"The content of elements must consist of well-formed character data or markup."
자바에서 DB 제어를 할때 많이 쓰이는 것중하나가 mybatis이다. xml을 쓸지 그냥 interface mapper로 해결할지는 선택이지만 xml 을 사용할 경우 위와 같은 에러를 볼 수 있다.
xml도 html과 유사한 태그형 마크업 언어이기 때문에 sql 쿼리에서 쓰이는 기호들이 xml 파일 형식을 어긋나게 하는 경우가 있는데 이때 저런 에러가 발생한다.
주로 <, > 같은 부등호로 조건 연산을 할때 나오는 에러이다.
저 부등호가 xml상의 태그로 인식되기 때문에 에러가 발생하는 것이다.
이럴 때 해결방법은 주로 2가지가 있다.
1. 엔터티 문자 사용
부등호나 다른 특수기호 사용시 xml 마크업 문법으로 인식되는 현상에 대처하기위해 xml자체에서 제공하는 방법이다.
이스케이프 코드와 유사하게 생각하면 될것 같다
특수문자 | XML 엔터티 | 설명 |
< | < | ( Less Than ) 작다 |
> | > | ( Greater Than ) 크다 |
& | & | ( Ampersand ) 앰퍼샌드 |
" | " | ( Double Quote ) 큰 따옴표 |
2. CDATA (Character Data)
xml에서 특수문자를 처리하는 방법 중 하나로 CDATA로 선언한 블록안은 그대로 문자열로 처리하라는 표시이다.
이 방법을 쓰면 위와 같은 표기를 바꾸지 않아도 되서 가독성면에서 더 편해진다.
CDATA 섹션을 선언하는 방법은
<![CDATA[
문자열 내용
]]>
이렇게 하면된다.
보기엔 편해 보이지만 뚜렷한 단점이 존재한다.
안에 내용을 문자열로 처리하기 때문에 섹션안에서는 xml 문법을 사용할 수 없다.
xml 문법을 기반으로 동작하는 mybatis의 if, when, foreach 등의 문법또한 동작하지 않는다 그래서 이러한 문법을 써야할때는 각 문법 블록안에서 CDATA를 선언해줘야한다.
특수문자의 양이 많지 않고 저런 mybatis 문법을 많이 사용해야하면 오히려 엔터티를 사용하는 편이 가독성이 올라간다고 볼수 있다.
'Lang > JAVA' 카테고리의 다른 글
[SpringBoot] 대규모 데이터 처리 (1) - mysql insert (0) | 2024.12.22 |
---|---|
[SpringBoot] Spring Batch (2) - 설명 및 구현 예시 (0) | 2024.10.07 |
[SpringBoot] Spring Batch (1) - Batch에 대해 (0) | 2024.10.07 |
문자열 합치기 방식 비교 (concat VS "+" VS StringBuilder VS StringBuffer) (0) | 2024.09.05 |
[GabageCollection] 가비지 컬렉션 알고리즘 종류와 구조 (0) | 2024.08.20 |