У меня есть 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 есть и другие вещи, но я буду разбираться с этими частями отдельно. Я также хочу просто анализировать все внутри "узла" в строке вместо чтения его атрибутов.
Заранее спасибо.
Я бы рекомендовал реализовать 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)
. Это сделает для вас всю "прогулку по дереву".
Это требует композитного шаблона.
http://www.dofactory.com/Patterns/PatternComposite.aspx#_self1
Для этого в списке необходимо, чтобы T был типом, который может быть либо другим списком, либо узлом.
Что касается чтения, вы слышали о DOM?
http://msdn.microsoft.com/en-us/library/hf9hbf87%28v=vs.110%29.aspx
Он в основном анализирует xml в структуре данных для вас. Поэтому вы можете изобретать колесо здесь.