XML DOM 트래버스 노드 트리
순회는 노드 트리를 통해 반복하거나 이동하는 것을 의미합니다.
노드 트리 순회
예를 들어 각 요소의 값을 추출하려는 경우와 같이 종종 XML 문서를 반복하고 싶을 때가 있습니다.
이것을 "노드 트리 순회"라고 합니다.
아래 예제는 <book>의 모든 자식 노드를 반복하고 이름과 값을 표시합니다.
예시
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var x, i ,xmlDoc;
var txt = "";
var text = "<book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book>";
parser = new DOMParser();
xmlDoc
= parser.parseFromString(text,"text/xml");
// documentElement always
represents the root node
x = xmlDoc.documentElement.childNodes;
for (i =
0; i < x.length ;i++) {
txt += x[i].nodeName + ": " +
x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>
</body>
</html>
산출:
title: Everyday Italian
author: Giada De Laurentiis
year: 2005
설명된 예:
- XML 문자열을 xmlDoc에 로드
- 루트 요소의 자식 노드 가져오기
- 각 자식 노드에 대해 텍스트 노드의 노드 이름과 노드 값을 출력합니다.
DOM 구문 분석의 브라우저 차이점
모든 최신 브라우저는 W3C DOM 사양을 지원합니다.
그러나 브라우저마다 약간의 차이가 있습니다. 한 가지 중요한 차이점은 다음과 같습니다.
- 공백과 줄 바꿈을 처리하는 방식
DOM - 공백 및 새 줄
XML은 노드 사이에 줄 바꿈 또는 공백 문자를 포함하는 경우가 많습니다. 메모장과 같은 간단한 편집기로 문서를 편집하는 경우가 종종 있습니다.
다음 예제(메모장으로 편집)에는 각 줄 사이에 CR/LF(새 줄)가 포함되어 있고 각 자식 노드 앞에 두 개의 공백이 있습니다.
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
Internet Explorer 9 및 이전 버전은 다른 브라우저와 달리 빈 공백이나 줄 바꿈을 텍스트 노드로 취급하지 않습니다.
다음 예는 ( books.xml 의 ) 루트 요소가 가지고 있는 자식 노드의 수를 출력할 것입니다. IE9 및 이전 버전은 4개의 하위 노드를 출력하는 반면 IE10 및 이후 버전 및 기타 브라우저는 9개의 하위 노드를 출력합니다.
예시
function myFunction(xml) {
var xmlDoc = xml.responseXML;
x =
xmlDoc.documentElement.childNodes;
document.getElementById("demo").innerHTML =
"Number
of child nodes: " + x.length;
}
PCDATA - 구문 분석된 문자 데이터
XML 파서는 일반적으로 XML 문서의 모든 텍스트를 구문 분석합니다.
XML 요소가 구문 분석되면 XML 태그 사이의 텍스트도 구문 분석됩니다.
<message>This text is also parsed</message>
파서는 이 예에서와 같이 XML 요소가 다른 요소를 포함할 수 있기 때문에 이 작업을 수행합니다. 여기서 <name> 요소는 두 개의 다른 요소(첫 번째 및 마지막)를 포함합니다.
<name><first>Bill</first><last>Gates</last></name>
파서는 이것을 다음과 같이 하위 요소로 나눕니다.
<name>
<first>Bill</first>
<last>Gates</last>
</name>
구문 분석된 문자 데이터(PCDATA)는 XML 구문 분석기에 의해 구문 분석될 텍스트 데이터에 대해 사용되는 용어입니다.
CDATA - (분석되지 않은) 문자 데이터
CDATA라는 용어는 XML 파서에서 구문 분석해서는 안 되는 텍스트 데이터에 대해 사용됩니다.
"<" 및 "&"와 같은 문자는 XML 요소에서 사용할 수 없습니다.
"<"는 파서가 이를 새 요소의 시작으로 해석하기 때문에 오류를 생성합니다.
"&"는 파서가 문자 엔터티의 시작으로 해석하기 때문에 오류를 생성합니다.
JavaScript 코드와 같은 일부 텍스트에는 "<" 또는 "&" 문자가 많이 포함되어 있습니다. 오류를 피하기 위해 스크립트 코드를 CDATA로 정의할 수 있습니다.
CDATA 섹션 내부의 모든 것은 파서에서 무시됩니다.
CDATA 섹션은 " <![CDATA[ "로 시작하고 " ]]> "로 끝납니다.
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0)
{
return 1;
} else
{
return 0;
}
}
]]>
</script>
위의 예에서 CDATA 섹션 내부의 모든 것은 파서에 의해 무시됩니다.
CDATA 섹션에 대한 참고 사항:
CDATA 섹션은 "]]>" 문자열을 포함할 수 없습니다. 중첩된 CDATA 섹션은 허용되지 않습니다.
CDATA 섹션의 끝을 표시하는 "]]>"는 공백이나 줄 바꿈을 포함할 수 없습니다.