Рекурсивное чтение древовидной структуры XML в списке <T>

1

У меня есть XML файл, помимо прочего, следующая структура.

<start something="1">
    <into intoSomething="1">
    <node nodeAtt="1"> 
        <thisChanges change="1"/>
    </node>
    <node nodeAtt="1"> 
        <thisChanges change="1"/>
    </node>
    <start something="1">
        <node nodeAtt="1"> 
            <thisChanges change="1"/>
        </node>
        <node nodeAtt="1"> 
            <thisChanges change="1"/>
        </node>
        <start something="1">
            <node nodeAtt="1"> 
                <thisChanges change="1"/>
            </node>
            <node nodeAtt="1"> 
                <thisChanges change="1"/>
            </node>
        </start>
        <node nodeAtt="1"> 
            <thisChanges change="1"/>
        </node>
        <node nodeAtt="1"> 
            <thisChanges change="1"/>
        </node>
    </start>
    <node nodeAtt="1"> 
        <thisChanges change="1"/>
    </node>
    <node nodeAtt="1"> 
        <thisChanges change="1"/>
    </node>
</start>

Каким будет лучший способ прочитать их в List рекурсивно в.net? В файле XML есть и другие вещи, но я буду разбираться с этими частями отдельно. Я также хочу просто анализировать все внутри "узла" в строке вместо чтения его атрибутов.

Заранее спасибо.

Теги:

2 ответа

0

Я бы рекомендовал реализовать IEnumerable<T> в экземпляре. Реализация будет идти по дереву в вашем xml и создает node вам интересны.

Затем просто назовите ToList.

XDocument xmlFile = //use whatever source you like, doesnt even need to be an XDocument
TreeWalker walker = new TreeWalker(xmlfile);
var list = walker.ToList();

Если вы используете XDocument, очень простой способ получить все элементы node - это XDocument.Descendants(XName). Это сделает для вас всю "прогулку по дереву".

0

Это требует композитного шаблона.

http://www.dofactory.com/Patterns/PatternComposite.aspx#_self1

Для этого в списке необходимо, чтобы T был типом, который может быть либо другим списком, либо узлом.

Что касается чтения, вы слышали о DOM?

http://msdn.microsoft.com/en-us/library/hf9hbf87%28v=vs.110%29.aspx

Он в основном анализирует xml в структуре данных для вас. Поэтому вы можете изобретать колесо здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню