컴파일된 XPath 식
업데이트: November 2007
XPathExpression 개체는 XPathExpression 클래스의 정적 Compile 메서드 또는 XPathNavigator 클래스의 Compile 메서드 중 하나에서 반환된 컴파일된 XPath 쿼리를 나타냅니다.
XPathExpression 클래스
같은 XPath 쿼리를 두 번 이상 사용하는 경우 XPathExpression 개체가 나타내는 컴파일된 XPath 쿼리는 매우 유용합니다.
예를 들어, 매번 XPath 쿼리를 나타내는 문자열을 사용하는 대신 Select 메서드를 여러 번 호출할 경우 XPathExpression 클래스의 Compile 메서드 또는 XPathNavigator 클래스의 Compile 메서드를 사용하여 XPathExpression 개체에서 XPath 쿼리를 컴파일하고 캐시하면 다시 사용이 가능하며 성능도 향상시킬 수 있습니다.
컴파일한 후에는 XPath 쿼리에서 반환되는 형식에 따라 XPathExpression 개체를 다음 XPathNavigator 클래스 메서드에 대한 입력으로 사용할 수 있습니다.
다음 표에서는 각 W3C XPath 반환 형식, 해당 Microsoft .NET Framework 형식 및 반환 형식을 기준으로 XPathExpression 개체와 함께 사용할 수 있는 메서드에 대해 설명합니다.
W3C XPath 반환 형식 |
해당 .NET Framework 형식 |
설명 |
메서드 |
---|---|---|---|
Node set |
문서 순서에 따라 중복 없이 생성된, 정렬되지 않은 노드 컬렉션입니다. |
||
Boolean |
true 또는 false 값입니다. |
Evaluate 또는 |
|
Number |
부동 소수점 숫자입니다. |
||
String |
UCS 문자 시퀀스입니다. |
참고: |
---|
Matches 메서드에는 XPath 식을 매개 변수로 사용할 수 있습니다. SelectSingleNode 메서드는 W3C XPath 반환 형식이 아닌 XPathNavigator 개체를 반환합니다. |
ReturnType 속성
XPath 쿼리를 XPathExpression 개체로 컴파일한 후 XPathExpression 개체의 ReturnType 속성을 사용하여 XPath 쿼리가 반환하는 대상을 결정합니다.
ReturnType 속성은 W3C XPath 반환 형식을 나타내는 다음 XPathResultType 열거형 값 중 하나를 반환합니다.
다음 예제에서는 XPathExpression 개체를 사용하여 books.xml 파일에서 숫자 및 노드 집합을 반환합니다. 각 XPathExpression 개체의 ReturnType 속성과 Evaluate 및 Select 메서드의 결과가 콘솔에 나타납니다.
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 파일을 입력으로 사용합니다.
<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를 사용하여 노드 집합 탐색을 참조하십시오.
참고 항목
개념
XPathNavigator를 사용하여 XML 데이터 선택
XPathNavigator를 사용하여 XPath 식 계산