我有一个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>
在.net中递归读取这些列表的最佳方法是什么? XML文件中还有其他内容,但我将分别处理这些部分。我还想将“node”中的所有内容解析为字符串,而不是读取其属性。
提前致谢。
答案 0 :(得分: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解析为数据结构。所以你可能会在这里重新发明轮子。
答案 1 :(得分: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)
。这将为你做所有的“树行走”。