이 문서에서는 XML 경로 언어(XPath) 표현식과 XPathNavigator 클래스를 사용하여 XPathDocument 개체를 쿼리하는 방법을 설명합니다.
XPath는 프로그래밍 방식으로 식을 평가하고 문서에서 특정 노드를 선택하는 데 사용됩니다.
이 문서에서는 Microsoft .NET Framework 클래스 라이브러리 네임스페이스를 System.Xml.XPath참조합니다.
적용 대상: Visual Studio, .NET Framework
원래 KB 번호: 308333
필수 조건
이 문서에서는 다음 항목에 대해 잘 알고 있다고 가정합니다.
- Visual C#
- XML 용어
- XML 파일 만들기 및 읽기
- XPath 구문
XPath 표현이 포함된 XPathDocument를 쿼리합니다.
Microsoft Visual Studio에서 Visual C# 콘솔 애플리케이션을 만듭니다.
참고 항목
이 예제에서는 이름이Books.xml파일을 사용합니다. 고유한 Books.xml 파일을 만들거나 .NET SDK(소프트웨어 개발 키트) 빠른 시작에 포함된 샘플을 사용할 수 있습니다.
빠른 시작이 설치되어 있지 않고 설치하지 않으려는 경우 Books.xml 다운로드 위치에 대한 "관련 콘텐츠" 섹션을 참조하세요.
빠른 시작이 설치된 경우 폴더에서
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VBBooks.xml 파일을 찾을 수 있습니다. 이 프로젝트를 만든 폴더의 하위 폴더에 파일을\Bin\Debug복사할 수 있습니다.프로젝트에서 네임스페이스를 참조하는지 확인합니다
System.Xml.코드의
using뒷부분에서XmlXPath해당 네임스페이스의 선언을 한정할 필요가 없도록 및 네임스페이스의 문을 사용합니다. 다음과 같이 다른 선언 앞에 문을 사용할using수 있습니다.using System.Xml; using System.Xml.XPath;적절한 변수를 선언합니다.
XPathDocumentXML 문서를 저장할 개체,XpathNavigatorXPath 식을 계산할 개체 및XPathNodeIterator선택한 노드를 반복할 개체를 선언합니다.StringXPath 식을 보유할 개체를 선언합니다. 에서 함수Class1에Main선언 코드를 추가합니다.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;XPathDocument와 샘플 파일 Books.xml를 함께 로드합니다. 이 클래스는XPathDocumentXSLT(Extensible Stylesheet Language Transformations)를 사용하여 XML 문서 처리를 위한 빠르고 성능 지향적인 캐시를 제공합니다. XML DOM(문서 개체 모델)과 비슷하지만 XSLT 처리 및XPath데이터 모델에 매우 최적화되어 있습니다.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");XPathNavigator문서에서 만듭니다. 개체XPathNavigator는 읽기 전용 XPath 쿼리에 사용됩니다. XPath 쿼리는 결과 값 또는 여러 노드를 반환할 수 있습니다.// Create a navigator to query with XPath. nav = docNav.CreateNavigator();XPath 식을 만들어서 책의 평균 비용을 찾습니다. 이 XPath 식은 단일 값을 반환합니다. XPath 구문에 대한 자세한 내용은 "참조" 섹션의 XPath 구문을 참조하세요.
// Find the average cost of a book. // This expression uses standard XPath syntax. strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";개체의
Evaluate메서드를XPathNavigator사용하여 XPath 식을 평가합니다. 메서드는Evaluate식의 결과를 반환합니다.// Use the Evaluate method to return the evaluated expression. Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));XPath 식을 만들어 10달러 이상의 비용이 드는 모든 책을 찾습니다. 이 XPath 식은 XML 원본에서 타이틀 노드만 반환합니다.
// Find the title of the books that are greater then $10.00. strExpression = "/bookstore/book/title[../price>10.00]";선택된 노드를 위해
XPathNavigator의Select메서드를 사용하여XPathNodeIterator를 생성합니다. XPathXPathNodeIterator노드 집합을 나타내며 이 노드 집합에 대한 작업을 지원합니다.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);선택한 노드를 이동하려면
XPathNavigator의Select메서드에서 반환된XPathNodeIterator를 사용합니다. 이 경우XPathNodeIterator의MoveNext메서드를 사용하여 선택한 모든 노드를 반복적으로 탐색할 수 있습니다.Console.WriteLine("List of expensive books:"); //Iterate through the results showing the element value. while (NodeIter.MoveNext()) { Console.WriteLine("Book Title: {0}", NodeIter.Current.Value); };이 메서드를
ReadLine사용하여 콘솔 디스플레이의 끝에 일시 중지를 추가하여 이전 단계의 결과를 더 쉽게 표시합니다.// Pause Console.ReadLine();프로젝트를 빌드한 후 실행합니다.
참고 항목
결과는 콘솔 창에 표시됩니다.
문제 해결
코드를 테스트할 때 다음과 같은 예외 오류 메시지가 표시될 수 있습니다.
An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll
Additional information: System error.
이 예외는 다음 코드 줄에서 발생합니다.
docNav = new XPathDocument("c:\\books.xml");
잘못된 처리 명령으로 인해 오류가 발생합니다. 예를 들어 처리 명령에 불필요한 공백이 포함될 수 있습니다. 다음 예제는 잘못된 처리 명령입니다.
<?xml version='1.0' ?>
예외를 해결하려면 다음 해결 방법 중 하나를 사용합니다.
잘못된 처리 명령을 수정합니다. 다음 예제는 유효한 처리 명령입니다.
<?xml version='1.0'?>Books.xml 파일에서 XML 처리 명령을 제거합니다.