Share via


컴파일된 XPath 식

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

XPathExpression 클래스

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

예를 들어, 매번 XPath 쿼리를 나타내는 문자열을 사용하는 대신 Select 메서드를 여러 번 호출할 경우 Compile 클래스의 XPathExpression 메서드 또는 Compile 클래스의 XPathNavigator 메서드를 사용하여 XPathExpression 개체에서 XPath 쿼리를 컴파일하고 캐시하면 다시 사용이 가능하며 성능도 향상시킬 수 있습니다.

컴파일한 후에는 XPath 쿼리에서 반환되는 형식에 따라 XPathExpression 개체를 다음 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 식을 매개 변수로 사용할 수 있습니다. SelectSingleNode 메서드는 W3C XPath 반환 형식이 아닌 XPathNavigator 개체를 반환합니다.

ReturnType 속성

XPath 쿼리를 XPathExpression 개체로 컴파일한 후 ReturnType 개체의 XPathExpression 속성을 사용하여 XPath 쿼리가 반환하는 대상을 결정합니다.

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

다음 예제에서는 XPathExpression 개체를 사용하여 books.xml 파일에서 숫자 및 노드 집합을 반환합니다. 각 ReturnType 개체의 XPathExpression 속성과 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을 사용하는 것보다 빠릅니다. //book XPath 식은 XML 트리에서 모든 노드를 검색하여 일치하는 노드를 식별합니다.

또한 선택 기준이 단순한 경우 XPathNavigator 클래스에서 제공하는 노드 집합 탐색 메서드를 사용하면 XPathNavigator 클래스에서 제공하는 선택 메서드를 사용하는 것보다 성능이 향상됩니다. 예를 들어, 현재 노드의 첫 번째 자식을 선택해야 할 경우 MoveToFirst 메서드를 사용하는 것이 child::*[1] XPath 식 및 Select 메서드를 사용하는 것보다 빠릅니다.

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

참고 항목