다음을 통해 공유


Visual C에서 XPath 식을 사용하여 XML 쿼리#

이 문서에서는 XML 경로 언어(XPath) 표현식과 XPathNavigator 클래스를 사용하여 XPathDocument 개체를 쿼리하는 방법을 설명합니다.

XPath는 프로그래밍 방식으로 식을 평가하고 문서에서 특정 노드를 선택하는 데 사용됩니다.

이 문서에서는 Microsoft .NET Framework 클래스 라이브러리 네임스페이스를 System.Xml.XPath참조합니다.

적용 대상: Visual Studio, .NET Framework

원래 KB 번호: 308333

필수 조건

이 문서에서는 다음 항목에 대해 잘 알고 있다고 가정합니다.

  • Visual C#
  • XML 용어
  • XML 파일 만들기 및 읽기
  • XPath 구문

XPath 표현이 포함된 XPathDocument를 쿼리합니다.

  1. Microsoft Visual Studio에서 Visual C# 콘솔 애플리케이션을 만듭니다.

    참고 항목

    이 예제에서는 이름이Books.xml파일을 사용합니다. 고유한 Books.xml 파일을 만들거나 .NET SDK(소프트웨어 개발 키트) 빠른 시작에 포함된 샘플을 사용할 수 있습니다.

    빠른 시작이 설치되어 있지 않고 설치하지 않으려는 경우 Books.xml 다운로드 위치에 대한 "관련 콘텐츠" 섹션을 참조하세요.

    빠른 시작이 설치된 경우 폴더에서 Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB Books.xml 파일을 찾을 수 있습니다. 이 프로젝트를 만든 폴더의 하위 폴더에 파일을 \Bin\Debug 복사할 수 있습니다.

  2. 프로젝트에서 네임스페이스를 참조하는지 확인합니다 System.Xml .

  3. 코드의 using 뒷부분에서 XmlXPath 해당 네임스페이스의 선언을 한정할 필요가 없도록 및 네임스페이스의 문을 사용합니다. 다음과 같이 다른 선언 앞에 문을 사용할 using 수 있습니다.

    using System.Xml;
    using System.Xml.XPath;
    
  4. 적절한 변수를 선언합니다. XPathDocument XML 문서를 저장할 개체, XpathNavigator XPath 식을 계산할 개체 및 XPathNodeIterator 선택한 노드를 반복할 개체를 선언합니다. String XPath 식을 보유할 개체를 선언합니다. 에서 함수Class1Main 선언 코드를 추가합니다.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. XPathDocument와 샘플 파일 Books.xml를 함께 로드합니다. 이 클래스는 XPathDocument XSLT(Extensible Stylesheet Language Transformations)를 사용하여 XML 문서 처리를 위한 빠르고 성능 지향적인 캐시를 제공합니다. XML DOM(문서 개체 모델)과 비슷하지만 XSLT 처리 및 XPath 데이터 모델에 매우 최적화되어 있습니다.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. XPathNavigator 문서에서 만듭니다. 개체 XPathNavigator 는 읽기 전용 XPath 쿼리에 사용됩니다. XPath 쿼리는 결과 값 또는 여러 노드를 반환할 수 있습니다.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. 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)";
    
  8. 개체의 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));
    
  9. XPath 식을 만들어 10달러 이상의 비용이 드는 모든 책을 찾습니다. 이 XPath 식은 XML 원본에서 타이틀 노드만 반환합니다.

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. 선택된 노드를 위해 XPathNavigatorSelect 메서드를 사용하여 XPathNodeIterator를 생성합니다. XPath XPathNodeIterator 노드 집합을 나타내며 이 노드 집합에 대한 작업을 지원합니다.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. 선택한 노드를 이동하려면 XPathNavigatorSelect 메서드에서 반환된 XPathNodeIterator를 사용합니다. 이 경우 XPathNodeIteratorMoveNext 메서드를 사용하여 선택한 모든 노드를 반복적으로 탐색할 수 있습니다.

    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);
    };
    
  12. 이 메서드를 ReadLine 사용하여 콘솔 디스플레이의 끝에 일시 중지를 추가하여 이전 단계의 결과를 더 쉽게 표시합니다.

    // Pause
    Console.ReadLine();
    
  13. 프로젝트를 빌드한 후 실행합니다.

    참고 항목

    결과는 콘솔 창에 표시됩니다.

문제 해결

코드를 테스트할 때 다음과 같은 예외 오류 메시지가 표시될 수 있습니다.

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 처리 명령을 제거합니다.