Обработка дублирующих узлов в XML - PullRequest
0 голосов
/ 04 мая 2010

Сценарий:

Я анализирую значения из файла XML с использованием C # и использую следующий метод:

    private static string GetXMLNodeValue(XmlNode basenode, string strNodePath)
    {
        if (basenode.SelectSingleNode(strNodePath) != null)
            return (basenode.SelectSingleNode(strNodePath).InnerText);
        else
            return String.Empty;
    }

Чтобы получить конкретное значение из файла XML, я обычно передаю корневой узел и путь, например "parentnode / item"

Недавно я столкнулся с проблемой, когда два узла на одном и том же уровне документа имеют одинаковое имя.

Почему:

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

Вопрос:

Каков наилучший способ получить значения для узлов с одинаковыми именами? Моя мысль состояла в том, чтобы загрузить все значения, соответствующие имени узла, в массив, а затем использовать индекс массива для обращения к ним. Я не уверен, как реализовать это, хотя. (Я не очень разбираюсь в навигации по XML.)

Пример XML

<?xml version="1.0" ?>
<info>
  <processes>
    <process>
        <name>program1</name>
        <memory_use>24.8</memory_use>
    </process>
    <process>
        <name>program2</name>
        <memory_use>19.0</memory_use>
    </process>
  </processes>
</info>

Ответы [ 2 ]

3 голосов
/ 04 мая 2010

Вместо этого используйте метод SelectNodes, который дает вам список всех узлов, соответствующих вашему Xpath

1 голос
/ 04 мая 2010

Ответ на ваш вопрос: «Это зависит».

Это зависит от того, что вы собираетесь делать с «дублирующими» узлами. Что это значит для того, чтобы быть больше чем один с тем же именем? Была ли это ошибка в программе, сгенерировавшей XML? Было ли это правильно, и разрешено неограниченное количество таких узлов? Что они имеют в виду, когда их больше одного?

Вы должны ответить на эти вопросы, прежде чем разрабатывать код, который обрабатывает «дублирующие» узлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...