Рекурсивная функция для XML-файла (иерархические данные) - PullRequest
1 голос
/ 06 сентября 2008

У меня есть XML-файл в следующем формате:

<categories>
  <category id="1"></category>
  <category id="2">
    <category id="3"></category>
    <category id="4">
      <category id="5"></category>
    </category>
  </category>
</categories>

Может кто-нибудь подсказать, как мне пройти по файлу с помощью C #?

1 Ответ

2 голосов
/ 06 сентября 2008

Прежде всего, System.XML предоставляет несколько отличных способов работы с XML.

Я предполагаю, что вы загрузили свой XML в XMLDocument, что позволяет вам использовать XPath Selector или просто проходить через DOM.

Примерно так будет идти от любого элемента обратно к вершине с помощью рекурсии:

public XmlNode WalkToTopNode (XmlNode CurrentNode)
{
    if (CurrentNode.ParentNode == null)
        return CurrentNode;
    else
        return WalkToTopNode(CurrentNode.ParentNode);
}

Использование рекурсии для поиска узла по идентификатору можно сделать примерно так (обратите внимание, я набрал это в текстовом поле, это может быть неправильно):

public XmlNode GetElementById (string id, XmlNode node)
{
    if (node.Attributes["id"] != null && node.Attributes["id"].InnerText == id)
    {   
        return node;
    }
    else
    {
        foreach (XmlNode childNode in node.Children)
        {
            return GetElementById(id, childNode);
        }
    }

    return null;    
}

Однако, если вы используете рекурсию, когда в System.XML встроено так много лучших способов обхода узлов, возможно, пришло время переосмыслить вашу стратегию.

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