0

次の HTML ファイルがあるとします。

<html>
    <table class="class1">
        <tr>
            <td>1</td>
            <td>2</td>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
        </tr>
    </table>

    <table class="class2">
        <tr>
            <td>a</td>
            <td>b</td>
            <td>c</td>
            <td>d</td>
            <td>e</td>
        </tr>
    </table>

    <table class="class3">
        <tr>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
    </table>
</html>

この結果を取得するために、このファイルを XPath でクエリしたいと思います: 1234512345 このコードで:

var xNavigator = xPathDoc.CreateNavigator();
var iterator = xNavigator.Select("//html/table[@class='class1']/tr/td|//html/table[@class='class3']/tr/td");
while (iterator.MoveNext())
    Console.Write(iterator.Current.InnerXml);

しかし結果は: 1212345345

どうすれば 1212345345 の代わりに 1234512345 を取得できますか?

ありがとうございました。

4

2 に答える 2

1

「ノードセット」について話しているので、XPath 1.0 を使用していると思います - 本当にそう言うべきです。XPath 1.0 のノード セットは、特定の順序のないノードのセットです。ただし、XSLT は常にノード セット内のノードをドキュメントの順序で処理します。これは、私が知る限り、すべての XPath 1.0 プロセッサが XSLT で使用されているかどうかにかかわらず従う先例を確立しています。そのため、ノードセットを返す式は、ドキュメントの順序でノードを返す可能性が高く、これは観察している効果です。

XPath 2.0 ではシーケンスが導入され、任意の順序でノードを返すことができます。

于 2013-06-21T16:45:42.317 に答える