【发布时间】:2014-05-24 03:56:34
【问题描述】:
我正在解析一个 XML 结构,我的类如下所示:
class MyXml
{
//...
List<Node> Content { get; set; }
//...
}
class Node
{
// ...
public List<Node> Nodes { get; set; }
public string Type { get; set; }
//...
}
MyXml 代表我正在解析的 XML 文件,其元素都称为<node>。每个节点都有一个类型属性,可以有不同的值。
节点的类型与其深度无关。我可以在任何深度级别拥有任何节点类型。
我可以正确解析结构,所以我得到了一个 MyXml 对象,它的内容是一个节点列表,列表中的任何一个节点都可以有子节点等等(我为此使用了递归)。
我需要做的是展平整个结构,只提取某种类型的节点。
我试过了:
var query = MyXml.Content.SelectMany(n => n.Nodes);
但它只采用结构深度为 1 的节点。我想在同一个集合中抓取每个节点,无论深度如何,然后过滤我需要的内容。
【问题讨论】:
-
Properties
NodesansTypein classNode应标记为Public -
我编辑了将属性标记为公开的代码。另外,我不认为它是重复的,因为事先不知道节点的数量和类型,因此需要递归方法。