Возьмем следующий XML в качестве примера:XmlNodeList Weird Поведение
<root>
<lines>
<line>
<number>1</number>
</line>
<line>
<number>2</number>
</line>
</lines>
</root>
XmlNodeList nodeList = doc.SelectNodes("//lines/line");
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("//number");
}
Приведенный выше код приведет к индексу = 1 для обоих итераций.
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("number");
}
Приведенный выше код приведет к 1,2 соответственно. Я знаю, что // находит первое появление xpath, но я чувствую, что первое вхождение должно относиться к самому узлу. Похоже, что поведение обнаруживает первое появление из корня даже при выборе узлов из дочернего узла. Это то, как Microsoft планировала это работать или это ошибка.
Попробуйте '.// номер'. Предполагается, что поиск выполняется из контекстного узла. '//' предназначен для всего поиска документа, а не для контекста. –
Да, спасибо, но просто удалили сляки, как и в моем втором примере. Я просто думаю, что это путано, если вы ищете узел в узле, который // вернется к всему документу. – Maxqueue