|
확 인 란 |
|
문서번호 |
2014–T-001 |
보존기간 |
1년 |
작성일자 |
2014.04.11(금) |
작성자 |
박 수 원 |
XPathNavigator 기술문서
27기 박수원
목 차
1. 개요 ------------------------------------------------------------------ 3
(1)XPath(XML Path Language)란? ------------------------------------ 3
(2) XPathNavigator 클래스 ------------------------------------------- 3
(3) System.Xml.XPath 네임페이스의 클래스와 인터페이스 --------- 3
(4)XPathNavigator 객체의 탐색 메서드 ----------------------------- 3
2. XPathNavigator 사용예제 -------------------------------------------- 4
(1)Select 메서드를 사용하는 방법. ---------------------------------- 4
(2) 탐색 메서드를 사용하는 방법 ----------------------------------- 6
1. 개요
(1)XPath(XML Path Language)란?
①XML 문서 구조를 통해 경로 위에 지정한 구문을 사용하여 항목을 배치하고 처리하는 방법을 기술하는 W3C의 표준 언어이다.
②XSLT(Extensible Stylesheet Language Transformations로 XML 문서를 다른 XML 문서로 변환하는데 사용하는 XML 기반 언어.)와 XPointer(XML Pointer Language로 웹 상에 존재하는 XML 문서의 일부분에 주소를 부여 할 수 있는 방법을 제공하는 W3C 표준 언어.)언어에 사용될 목적으로 설계되었다.
③XML 문서의 특정 부분에 자유자재로 접근할 수 있는 기능을 제공한다.
④문자열, 숫자, Boolean 값을 조작할 수 있는 표현식을 만들 수 있다.
(2) XPathNavigator 클래스: System.Xml.XPath 네임페이스에서 정의되며 .NET Framework의 XPathNavigator 클래스는 XML 문서의 노드 및 노드 집합에 접속할 수 있다.
(3) System.Xml.XPath 네임페이스의 클래스와 인터페이스
클래스와 인터페이스 |
설명 |
클래스 | |
XPathNavigator |
XML 데이터를 탐색하고 편집하기 위한 커서 모델을 제공한다. |
XPathNodeIterator |
선택된 노드 집합을 반복할 수 있게 한다. |
XPathExpression |
컴파일된 XPath 식을 나타내는 형식화 된 클래스를 제공한다. Complie 메서드를 호출하면 XPathExpression 객체가 반환되고 Select, Evaluate, Matches 메서드가 이 클래스를 사용한다. |
XPathDocument |
XPath 데이터 모델을 사용하여 XML 문서에 대한 읽기전용의 빠른 메모리 내 표현을 제공한다. XmlDocument와 달리 Xml문서를 수정하지는 못한다. |
XPathException |
XPath 수식 처리 중에 에러를 만나면 발생되는 예외 클래스이다. |
인터페이스 | |
IXPathNavigable |
XPathNavigator 클래스에 대한 접근자를 제공한다. |
(4)XPathNavigator 객체의 탐색 메서드
메서드 |
설명 |
MoveTo |
XPathNavigator 객체가 지정된 XPathNavigator와 같은 위치로 이동한다. |
MoveToChild |
XPathNavigator 객체가 지정된 XPathNavigator의 자식 노드로 이동한다. |
MoveToFirst |
XPathNavigator 객체가 현재 노드의 첫 번째 형제 노드로 이동한다. |
MoveToFirstChild |
XPathNavigator 객체가 현재 노드의 첫 번재 자식 노드로 이동한다. |
MoveToFirstNamespace |
XPathNavigator 객체가 guswo 노드의 첫 번째 네임스페이스 노드로 이동한다. |
MoveToId |
지정된 String과 ID형식의 값이 일치할 때 특성을 포함한 노드로 이동한다. |
MoveToNext |
XPathNavigator 객체가 현재 노드의 다음 형제 노드로 이동한다. |
MoveToParent |
XPathNavigator 객체가 현재 노드의 부모 노드로 이동한다. |
MoveToPrevious |
XPathNavigator 객체가 현재 노드 이전 형제 노드로 이동한다. |
MoveToRoot |
XPathNavigator 객체가 현재 노드가 속해 있는 루트 노드로 이동한다. |
2. XPathNavigator 사용예제
(1)Select 메서드를 사용하여 XML 문서의 노드 집합을 선택하고 노드 집합을 순환하는 방법.
※예제에서 사용할 XML문서(Emp2.xml)
①Visual Studio에서 새로운 Visual C#.NET 콘솔 응용 프로그램을 만든다.
②using 문을 사용하여 System.Xml 네임스페이스를 참조하도록 한다.
using System.Xml; using System.Xml.XPath; |
③XPathDocument 객체를 생성하고 XML 문서를 사용하여 로드 한 후 XPathNavigator 객체를 생성하여 CreateNavigator메서드를 사용한다.
(프로젝트 폴더의 bin/Debug 폴더에 XML문서를 저장해야 한다.)
XPathDocument doc = new XPathDocument("Emp2.xml"); XPathNavigator nav = doc.CreateNavigator(); |
④XPathNodeIterator 객체를 생성하고 Select 메서드를 사용하여 반복 할 노드를 선택한다.
XPathNodeIterator itr = nav.Select("/학과/전자공학과"); |
⑤MoveNext 메서드를 사용하여 현재 노드부터 차례대로 돌면서 현재 위치의 노드 이름과 값을
보여준다.
while (itr.MoveNext()) { Console.WriteLine(itr.Current.Name); Console.WriteLine(itr.Current.Value); } |
⑥전체 코드
using System; using System.Xml; using System.Xml.XPath;
namespace XpathNavigator { class Program { static void Main(string[] args) { XPathDocument doc = new XPathDocument("Emp2.xml"); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator itr = nav.Select("/학과/전자공학과"); while (itr.MoveNext()) { Console.WriteLine(itr.Current.Name); Console.WriteLine(itr.Current.Value); } } } } |
⑦출력 화면
⑧‘nav.Select("/학과/컴퓨터공학과/첫번째");’로 변경 후 출력 화면
(2) 탐색 메서드를 사용하여 XML문서의 노드를 이용하는 방법.
※(1)예제와 동일한 XML문서(Emp2.xml) 사용.
①Visual Studio에서 새로운 Visual C#.NET 콘솔 응용 프로그램을 만든다.
②using 문을 사용하여 System.Xml 네임스페이스를 참조하도록 한다.
using System.Xml; using System.Xml.XPath; |
③XPathDocument 객체를 생성하고 XML 문서를 사용하여 로드 한 후 XPathNavigator 객체를 생성하여 CreateNavigator메서드를 사용한다.
(프로젝트 폴더의 bin/Debug 폴더에 XML문서를 저장해야 한다.)
XPathDocument doc = new XPathDocument("Emp2.xml"); XPathNavigator nav = doc.CreateNavigator(); |
④MoveToRoot 메서드를 사용하여 전체 노드 트리가 포함된 문서의 루트 노드로 이동 후
MoveToFirstChild 메서드를 사용하여 첫 번째 자식 노드로 이동한다.
(Emp2.xml 문서의 경우 학과 노드로 이동한다.)
nav.MoveToRoot(); //문서의 루트 노드로 이동.
nav.MoveToFirstChild(); //문서의 첫번째 자식 노드로 이동. Console.Write(nav.Name); //현재 노드 이름 출력. |
⑤HasChildren 속성을 사용하여 현재 노드의 자식 노드가 있는지 확인 후 탐색 메서드들을 사용하여
탐색하고자 하는 XML 문서의 노드로 이동하며 노드의 이름과 값을 출력한다.
(학과 노드의 자식 문서가 있으므로 조건문이 실행된다.)
if (nav.HasChildren == true) { nav.MoveToFirstChild(); Console.Write(">>"); //부모 노드에서 자식 노드로 이동함을 뜻함. Console.Write(nav.Name); do { nav.MoveToNext(); Console.Write("▼");//현재 노드의 형제 노드로 이동함을 뜻함. Console.WriteLine(nav.Name); Console.WriteLine(nav.Value); } while (nav.MoveToNext()); //현재 노드의 형제 수준의 노드 이동을 반복한다. } |
⑥전체 코드
using System; using System.Xml; using System.Xml.XPath;
namespace XpathNavigator { class Program { static void Main(string[] args) { XPathDocument doc = new XPathDocument("Emp2.xml"); XPathNavigator nav = doc.CreateNavigator(); nav.MoveToRoot(); //문서의 루트 노드로 이동.
nav.MoveToFirstChild(); //문서의 첫번째 자식 노드로 이동. Console.Write(nav.Name); //현재 노드 이름 출력.
if (nav.HasChildren == true) { nav.MoveToFirstChild(); Console.Write(">>"); //부모 노드에서 자식 노드로 이동함을 뜻함. Console.Write(nav.Name); do { nav.MoveToNext(); Console.Write("▼");//현재 노드의 형제 노드로 이동함을 뜻함. Console.WriteLine(nav.Name); Console.WriteLine(nav.Value); } while (nav.MoveToNext()); //현재 노드의 형제 수준의 노드 이동을 반복한다. } } } } |
⑦출력 화면