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 쿼리

  1. 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 복사할 수 있습니다.
  2. 프로젝트에서 네임스페이스를 참조하는지 확인합니다 System.Xml .

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

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

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. 샘플 파일 Books.xml 사용하여 을 XPathDocument 로드합니다. 클래스는 XPathDocument XSLT(Extensible Stylesheet Language Transformations)를 사용하여 XML 문서 처리를 위한 빠르고 성능 지향적인 캐시를 제공합니다. DOM(XML 문서 개체 모델)과 비슷하지만 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. XPathNodeIterator 의 메서드를 사용하여 선택한 노드에 Select 대한 을 만듭니다XPathNavigator. 는 XPathNodeIterator XPath 노드 집합을 나타내며 이 노드 집합에 대한 작업을 지원합니다.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. 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);
    };
    
  12. ReadLine 위의 결과를 더 쉽게 표시하려면 메서드를 사용하여 콘솔 디스플레이의 끝에 일시 중지를 추가합니다.

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

    참고

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

문제 해결

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

System.Xml 형식의 처리되지 않은 예외입니다. System.xml.dll XmlException이 발생했습니다.
추가 정보: 시스템 오류입니다.

예외 오류는 다음 코드 줄에서 발생합니다.

docNav = new XPathDocument("c:\\books.xml");

예외 오류는 잘못된 처리 명령으로 인해 발생합니다. 예를 들어 처리 명령에는 불필요한 공백이 포함될 수 있습니다. 다음 예제는 잘못된 처리 명령입니다.

<?xml version='1.0' ?>

예외를 resolve 하려면 다음 해결 방법 중 하나를 사용합니다.

  • 잘못된 처리 명령을 수정합니다. 다음 예제는 유효한 처리 명령입니다.

    <?xml version='1.0'?>
    
  • Books.xml 파일에서 XML 처리 명령을 제거합니다.

참조