다음을 통해 공유


컴파일된 XPath 식

XPathExpression 객체는 Compile 클래스의 정적 XPathExpression 메서드 또는 Compile 클래스의 XPathNavigator 메서드에서 반환된 컴파일된 XPath 쿼리를 나타냅니다.

XPathExpression 클래스

개체가 나타내는 컴파일된 XPathExpression XPath 쿼리는 동일한 XPath 쿼리를 두 번 이상 사용하는 경우에 유용합니다.

예를 들어 메서드를 Select 여러 번 호출할 때 매번 XPath 쿼리를 나타내는 문자열을 사용하는 대신 클래스의 Compile 메서드 또는 XPathExpression 클래스 메서드 Compile 를 사용하여 XPathNavigator 재사용 및 성능 향상을 위해 개체에서 XPathExpression XPath 쿼리를 컴파일하고 캐시합니다.

컴파일된 후에는 XPathExpression XPath 쿼리에서 반환된 형식에 따라 다음 XPathNavigator 클래스 메서드에 대한 입력으로 개체를 사용할 수 있습니다.

다음 표에서는 각 W3C XPath 반환 형식, Microsoft .NET Framework 동등성 및 반환 형식에 따라 개체를 사용할 수 있는 메서드 XPathExpression 에 대해 설명합니다.

W3C XPath 반환 형식 .NET Framework 해당 형식 설명 메서드
Node set XPathNodeIterator 문서 순서에 따라 중복되지 않은 노드의 비순차적 컬렉션입니다. Select 또는 Evaluate
Boolean Boolean true 또는 false 값입니다. Evaluate 또는

Matches
Number Double 부동 소수점 숫자입니다. Evaluate
String String UCS 문자 시퀀스입니다. Evaluate

비고

메서드는 Matches XPath 식을 해당 매개 변수로 허용합니다. 이 메서드 SelectSingleNodeXPathNavigator W3C XPath 반환 형식 중 하나가 아닌 개체를 반환합니다.

ReturnType 속성

XPath 쿼리가 개체로 XPathExpression 컴파일된 후 개체의 ReturnType 속성을 사용하여 XPathExpression XPath 쿼리가 반환하는 항목을 확인할 수 있습니다.

이 속성은 ReturnType W3C XPath 반환 형식을 나타내는 다음 XPathResultType 열거형 값 중 하나를 반환합니다.

다음 예제는 XPathExpression 객체를 사용하여 books.xml 파일에서 숫자와 노드 집합을 반환합니다. ReturnTypeXPathExpression 개체의 속성과 그 결과 EvaluateSelect 메서드가 콘솔에 기록됩니다.

Dim document As XPathDocument = New XPathDocument("books.xml")  
Dim navigator As XPathNavigator = document.CreateNavigator()  
  
' Returns a number.  
Dim query1 As XPathExpression = navigator.Compile("bookstore/book/price/text()*10")  
Console.WriteLine(query1.ReturnType)  
  
Dim number As Double = CType(navigator.Evaluate(query1), Double)  
Console.WriteLine(number)  
  
' Returns a node set.  
Dim query2 As XPathExpression = navigator.Compile("bookstore/book/price")  
Console.WriteLine(query2.ReturnType)  
  
Dim nodes As XPathNodeIterator = navigator.Select(query2)  
nodes.MoveNext()  
Console.WriteLine(nodes.Current.Value)  
XPathDocument document = new XPathDocument("books.xml");  
XPathNavigator navigator = document.CreateNavigator();  
  
// Returns a number.  
XPathExpression query1 = navigator.Compile("bookstore/book/price/text()*10");  
Console.WriteLine(query1.ReturnType);  
  
Double number = (Double)navigator.Evaluate(query1);  
Console.WriteLine(number);  
  
// Returns a node set.  
XPathExpression query2 = navigator.Compile("bookstore/book/price");  
Console.WriteLine(query2.ReturnType);  
  
XPathNodeIterator nodes = navigator.Select(query2);  
nodes.MoveNext();  
Console.WriteLine(nodes.Current.Value);  

이 예제에서는 books.xml 파일을 입력으로 사용합니다.

<?xml version="1.0" encoding="utf-8" ?> 
<bookstore>
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

고성능의 XPath 표현식

성능을 향상시키려면 쿼리에서 가능한 가장 구체적인 XPath 식을 사용합니다. 예를 들어 노드가 book 노드의 bookstore 자식 노드이고 bookstore 노드가 XML 문서에서 최상위 요소인 경우 XPath 식을 /bookstore/book 사용하는 것이 사용 //book보다 빠릅니다. XPath 식은 //book XML 트리의 모든 노드를 검색하여 일치하는 노드를 식별합니다.

또한 클래스에서 제공하는 노드 집합 탐색 메서드를 XPathNavigator 사용하면 선택 조건이 간단한 경우 클래스에서 제공하는 XPathNavigator 선택 메서드에 대한 성능이 향상될 수 있습니다. 예를 들어, 현재 노드의 첫 번째 자식을 선택해야 하는 경우 MoveToFirst XPath 표현식과 child::*[1] 메서드를 사용하는 것보다 Select 메서드를 사용하는 것이 더 빠릅니다.

클래스의 XPathNavigator 노드 집합 탐색 메서드에 대한 자세한 내용은 XPathNavigator를 사용하여 노드 집합 탐색을 참조하세요.

참고하십시오