Получить значение xmlnode

У меня есть XML ниже. Сначала я сделаю SelectNode для выбора. Затем я хочу сделать foreach на двух выбранных узлах, а затем выбрать для каждого из них соответственно.

    <Root>
    <persons>
     <Number>2525</Number>
     <Number>2626</Number>
      <persons>
        <Number>2828</Number>
        <Number>2929</Number>
      </persons>
    </persons>
    </Root>

При первом запуске foreach я получаю Age и Name для Arpit и Tushar, используя Xpath =

XmlNodeList outcomelist = each.SelectNodes(".//*[local-name()='persons']/*[local-name()='Number']");

"каждый" - это текущий узел.

Пожалуйста, помогите правильно написать xpath, чтобы я мог получать значения только для текущего узла и исключая дочерний узел.

Обратите внимание, что этот xml предназначен только для примера. Настоящий xml очень большой и утомительный для анализа.

1 ответ

Решение

Я думаю, что вам нужно потратить некоторое время на знакомство с XPath, потому что вы используете "все, что работает" методы, такие как // а также *[local-name() = '...']и это доставляет вам неприятности.

Выбрать верхний уровень personsэтот XPath должен работать:

XmlNodeList persons = each.SelectNodes("/Root/persons/Number");

Если ваш XML использует пространства имен, то вы можете сделать это, чтобы выбрать имя:

XmlNodeList age = 
  each.SelectNodes("/*/*[local-name() = 'persons']/*[local-name() = 'Number']");

но, как я упоминал выше, это хак, и в этом случае вам действительно следует правильно обрабатывать пространства имен.

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