Visual C#을 사용하여 XPath 식으로 XML 쿼리
이 문서에서는 클래스를 사용하여 XPath(XML Path Language) 식을 사용하여 개체를 쿼리 XPathDocument
하는 XPathNavigator
방법을 소개합니다.
원래 제품 버전: Visual Studio, .NET Framework
원래 KB 번호: 308333
요약
XPath는 프로그래밍 방식으로 식을 평가하고 문서에서 특정 노드를 선택하는 데 사용됩니다.
이 문서에서는 Microsoft .NET Framework 클래스 라이브러리 네임스페이스 를 참조합니다System.Xml.XPath
.
이 문서에서는 다음 topics 잘 알고 있다고 가정합니다.
- Visual C#
- XML 용어
- XML 파일 만들기 및 읽기
- XPath 구문
XPath 식을 사용하여 XML 쿼리
Visual Studio에서 새 Visual C# 콘솔 애플리케이션을 만듭니다.
참고
- 이 예제에서는 Books.xml이라는 파일을 사용합니다. 사용자 고유의 Books.xml 파일을 만들거나 .NET SDK(소프트웨어 개발 키트) 빠른 시작에 포함된 샘플을 사용할 수 있습니다. 빠른 시작이 설치되어 있지 않고 설치하지 않으려면 Books.xml 다운로드 위치에 대한 참조 섹션을 참조하세요. 빠른 시작이 설치된 경우 폴더에서
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB
파일을 찾을 수 있습니다. 이 프로젝트를 만든 폴더 아래에 있는 폴더에 파일을\Bin\Debug
복사할 수 있습니다.
- 이 예제에서는 Books.xml이라는 파일을 사용합니다. 사용자 고유의 Books.xml 파일을 만들거나 .NET SDK(소프트웨어 개발 키트) 빠른 시작에 포함된 샘플을 사용할 수 있습니다. 빠른 시작이 설치되어 있지 않고 설치하지 않으려면 Books.xml 다운로드 위치에 대한 참조 섹션을 참조하세요. 빠른 시작이 설치된 경우 폴더에서
프로젝트에서 네임스페이스를 참조하는지 확인합니다
System.Xml
.코드의
using
뒷부분Xml
에서 해당 네임스페이스의 선언을 한정할 필요가 없도록 및XPath
네임스페이스에서 문을 사용합니다. 다음과 같이 다른 선언 앞에 문을 사용할using
수 있습니다.using System.Xml; using System.Xml.XPath;
적절한 변수를 선언합니다.
XPathDocument
XML 문서를 저장할 개체,XpathNavigator
XPath 식을 평가하는 개체 및XPathNodeIterator
선택한 노드를 반복할 개체를 선언합니다.String
XPath 식을 저장할 개체를 선언합니다. 의 함수에Main
선언 코드를 추가합니다Class1
.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
샘플 파일 Books.xml 사용하여 을
XPathDocument
로드합니다. 클래스는XPathDocument
XSLT(Extensible Stylesheet Language Transformations)를 사용하여 XML 문서 처리를 위한 빠르고 성능 지향적인 캐시를 제공합니다. DOM(XML 문서 개체 모델)과 비슷하지만 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]";
XPathNodeIterator
의 메서드를 사용하여 선택한 노드에Select
대한 을 만듭니다XPathNavigator
. 는XPathNodeIterator
XPath 노드 집합을 나타내며 이 노드 집합에 대한 작업을 지원합니다.// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);
XPathNodeIterator
의 메서드XPathNavigator
에서Select
반환된 를 사용하여 선택한 노드를 이동합니다. 이 경우 의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();
프로젝트를 빌드하고 실행합니다.
참고
결과는 콘솔 창에 표시됩니다.
문제 해결
코드를 테스트할 때 다음과 같은 예외 오류 메시지가 표시될 수 있습니다.
System.Xml 형식의 처리되지 않은 예외입니다. System.xml.dll XmlException이 발생했습니다.
추가 정보: 시스템 오류입니다.
예외 오류는 다음 코드 줄에서 발생합니다.
docNav = new XPathDocument("c:\\books.xml");
예외 오류는 잘못된 처리 명령으로 인해 발생합니다. 예를 들어 처리 명령에는 불필요한 공백이 포함될 수 있습니다. 다음 예제는 잘못된 처리 명령입니다.
<?xml version='1.0' ?>
예외를 resolve 하려면 다음 해결 방법 중 하나를 사용합니다.
잘못된 처리 명령을 수정합니다. 다음 예제는 유효한 처리 명령입니다.
<?xml version='1.0'?>
Books.xml 파일에서 XML 처리 명령을 제거합니다.
참조
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기