Объединить два набора узлов с XPath

Предположим, у меня есть этот 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

У вас есть идея, как я могу получить 1234512345 вместо 1212345345?

Спасибо.

2 ответа

Решение

Поскольку вы говорите "наборы узлов", я предполагаю, что вы используете XPath 1.0 - вам действительно следует так сказать. Набор узлов в XPath 1.0 - это набор узлов без определенного порядка; однако XSLT всегда обрабатывает узлы в наборе узлов в порядке документов, и это создает прецедент, который, насколько мне известно, следует всем процессорам XPath 1.0, независимо от того, используются они в XSLT или нет. Поэтому выражения, которые возвращают наборы узлов, вероятно, будут возвращать узлы в порядке документа, что является эффектом, который вы наблюдаете.

В XPath 2.0 представлены последовательности, которые позволяют возвращать узлы в любом порядке по вашему выбору.

Я думаю, что вам нужно будет выполнить два Selects. Как описано в обсуждении ниже, XPath 1.0 (единственная версия, в которой поддерживается.NET) не определяет порядок узлов, и все реализации возвращают узлы в порядке документов.

Возврат XPath правильного порядка (вставлен в порядок документов)

Другие вопросы по тегам