xml

[xml] 텍스트 파싱중 깨달았던 내용 정리

잘할수있을거야 2022. 11. 16. 15:19

jdk11 개인참고용 기록

org.w3c.dom 패키지 라이브러리 사용하면서 텍스트 노드 관련하여 발생한 문제 정리


비었냐 안비었냐에 따른 텍스트 타입 자식 노드 존재 유무 차이

 

xml 구성상태

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<root>rootValue</root>

 

 

root 엘리먼트의 모든 자식 노드 개수 = 0(내부에 엘리먼트 미포함) + 1(rootValue 텍스트 노드) = 1


xml 구성상태2

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<root></root> <!-- 또는 <root/>인 경우 -->

여는 태그와 닫는 태그 사이에 값이 비었으므로 텍스트 타입 자식 노드가 미존재하게 된다.

오로지 공백또는 값이 있는 경우에만 텍스트 타입 자식 노드가 존재함


xml 구성상태3

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<root> </root>

 " "인 텍스트 타입 자식 노드 존재


xml 구성상태4

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<root> <test/> <test2/> </root>

root의 모든 자식 노드를 순서대로 기술하면

" "인 텍스트 노드

test 엘리먼트

" "인 텍스트 노드

test2 엘리먼트

" "인 텍스트 노드

 

로 총 5개의 노드를 자식으로 가짐


NodeList.item(int index)

 

보통 nodeList.getLength()로 확인된 개수를 통해 for문을 통해 사용할 것 같은데

item(int index)호출시 index에 유효하지 않은 값을 넣을 때 Exception안나고 null을 리턴되게 되있음


Node.getTextContent()

 

예제

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<root>h<test/>e <test2/> llo<test3/> dom</root>

root 엘리먼트 객체.getTextContent() 호출시 모든 자식 텍스트 노드를 순서대로 이어 붙인 String을 리턴한다.

-> "he  llo dom"


Document.createTextNode(빈문자열) 후 특정 엘리먼트에 append시킬때

 

빈문자열 파라메터를 전달하여 텍스트 노드를 생성하고 특정 엘리먼트에 붙이는 경우

xml이 다음과 같이 생성된다.

<test></test>

 

그러나 나중에 xml에서 자식 노드에 텍스트 노드가 존재하는지 보면 중간에 값이 없어서 텍스트 노드가 미존재한다.