XML 튜토리얼

XML 홈 XML 소개 XML 사용 방법 XML 트리 XML 구문 XML 요소 XML 속성 XML 네임스페이스 XML 표시 XML HttpRequest XML 파서 XML DOM XML XPath XML XSLT XML XQuery XML XLink XML 유효성 검사기 XML DTD XML 스키마 XML 서버 XML 예제 XML 퀴즈 XML 인증서

XML AJAX

AJAX 소개 AJAX XMLHttp AJAX 요청 AJAX 응답 AJAX XML 파일 AJAX PHP AJAX ASP AJAX 데이터베이스 AJAX 애플리케이션 AJAX 예제

XML DOM

DOM 소개 DOM 노드 DOM 액세스 DOM 노드 정보 DOM 노드 목록 DOM 순회 DOM 탐색 DOM 값 가져오기 DOM 변경 노드 DOM 제거 노드 DOM 교체 노드 DOM 생성 노드 DOM 추가 노드 DOM 복제 노드 DOM 예제

XPath 튜토리얼

XPath 소개 XPath 노드 XPath 구문 XPath 축 XPath 연산자 XPath 예제

XSLT 튜토리얼

XSLT 소개 XSL 언어 XSLT 변환 XSLT <템플릿> XSLT <값> XSLT <각각> XSLT <정렬> XSLT <만약> XSLT <선택> XSLT 적용 클라이언트의 XSLT 서버의 XSLT XSLT XML 편집 XSLT 예

XQuery 튜토리얼

XQuery 소개 XQuery 예제 XQuery FLWOR 엑스쿼리 HTML XQuery 용어 XQuery 구문 XQuery 추가 XQuery 선택 XQuery 함수

XML DTD

DTD 소개 DTD 빌딩 블록 DTD 요소 DTD 속성 DTD 요소 대 속성 DTD 엔터티 DTD 예

XSD 스키마

XSD 소개 XSD 방법 XSD <스키마> XSD 요소 XSD 속성 XSD 제한 사항

XSD 컴플렉스

XSD 요소 XSD 비어 있음 XSD 요소만 XSD 텍스트만 XSD 혼합 XSD 지표 XSD <모든> XSD <모든 속성> XSD 대체 XSD 예

XSD 데이터

XSD 문자열 XSD 날짜 XSD 숫자 XSD 기타 XSD 참조

서비스

XML 서비스 XML WSDL XML SOAP XML RDF XML RSS

참고문헌

DOM 노드 유형 DOM 노드 DOM 노드 목록 DOM NamedNodeMap DOM 문서 DOM 요소 DOM 속성 DOM 텍스트 DOM CDATA DOM 주석 DOM XMLHttpRequest DOM 파서 XSLT 요소 XSLT/XPath 함수

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

설명된 예:

  1. XML 문자열을 xmlDoc에 로드
  2. 루트 요소의 자식 노드 가져오기
  3. 각 자식 노드에 대해 텍스트 노드의 노드 이름과 노드 값을 출력합니다.


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 섹션의 끝을 표시하는 "]]>"는 공백이나 줄 바꿈을 포함할 수 없습니다.