Предположим, что у меня есть этот HTML-файл:Объединить два набора узлов с помощью XPath
<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?
спасибо.
Я думаю, что знаю, чего вы хотите, но этот пример неоднозначен. Измените его так, чтобы ячейки таблицы имели уникальные значения (возможно, 1-4 для таблицы class1 и A-F для таблицы class3). Затем опишите, что вы хотите. –
Я, но это так, потому что каждая ячейка имеет свои собственные данные (тип: дата может быть или конкретные значения)! но число, которое покажет вам необходимость иметь эти данные в порядке: все ячейки из таблицы calss1, а затем все ячейки в таблице class2 снова и снова –
Обратите внимание, что '|' не является оператором конкатенации, а является оператором объединения. В XPath 1.0 нет оператора конкатенации узлов, потому что наборы не имеют определенного порядка, поэтому конкатенация не имеет смысла. Чтобы отслеживать заказ, вам нужны последовательности, для которых требуется XPath 2.0. Или используйте функции среды C#, как предлагал @MichaelGunter. – LarsH