コンパイルされた XPath 式

XPathExpression オブジェクトは、XPathExpression クラスの静的 Compile メソッドまたは XPathNavigator クラスの Compile メソッドから返されるコンパイル済み XPath クエリを表します。

XPathExpression クラス

XPathExpression オブジェクトにより表されるコンパイル済み XPath クエリは、同じ XPath クエリが複数回使用されるときに有用です。

たとえば、Select メソッドを複数回呼び出すとき、毎回 XPath クエリを表す文字列を使用する代わりに、再使用とパフォーマンスの向上のために、XPathExpression クラスの Compile メソッド、または XPathNavigator クラスの Compile メソッドを使用して、XPath クエリを XPathExpression オブジェクトにコンパイルしてキャッシュします。

いったんコンパイルされると、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 式をパラメーターとして受け取ります。SelectSingleNode メソッドは W3C XPath の戻り型の 1 つではなく、1 つの XPathNavigator オブジェクトを返します。

戻り型のプロパティ

XPath クエリが XPathExpression オブジェクトにコンパイルされた後、XPathExpression オブジェクトの ReturnType プロパティを使用して、XPath クエリで何が返されるかを知ることができます。

ReturnType プロパティは、W3C XPath 戻り値を表す、次の XPathResultType 列挙値の 1 つを返します。

次の例は、XPathExpression オブジェクトを使用して、books.xml ファイルから 1 つの数値とノード セットを返します。 各 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 ファイルを入力として使用します。

<?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 を使用するノード セットのナビゲーション」を参照してください。

参照

参照

XmlDocument

XPathDocument

XPathNavigator

概念

XPath データ モデルを使用した XML データの処理

XPathNavigator を使用した XML データの選択

XPathNavigator による Xpath 式の評価

XPathNavigator によるノードの一致

XPath クエリで認識されるノード型

XPath クエリおよび名前空間