我是 linq to Xml 的新手。
我有一个递归方法作为参数XElement root
它应该以表示给定递归深度的相关子树根的方式保存 XML 数据。
void recursiveMethod(XElement root);
更具体地说,还可以看看这个 XML 示例:
<start>
<Class>
<Worker>
<Name> Dan </Name>
<Phone> 123 </Phone>
<Class>
<Address>
<Street> yellow brick road </Street>
<Zip Code> 123456 </Zip Code>
</Address>
</Class>
</Worker>
</Class>
...
</start>
正如你可以想象的那样,Name
是值类型,而Address
是一个类参考。
Xml 信息应通过反射动态添加(采用自上而下的方法)。
长话短说,想象一下我正在调查Worker
班级及达到Address
类并想要“向下钻取”,所以我想使用当前 Worker 类的子节点的正确引用作为新的 XElement 根来调用我的递归方法,这样我将能够向其中添加我通过反射找到的内容这Address
下面的一级递归深度。
请注意,此引用应该是 XElement 类型。
我怎样才能做到这一点?
EDIT:如果您有其他想法做所有这些事情但不与XElement
我也很高兴听到,尽管我更喜欢XElement
范围。
另一个问题:
我已经开始以一种天真的方式实现它,比如迭代所有字段(FieldInfo[] 的变量),如果我遇到了值类型(IsValueType),我会做类似的事情
root.Add(new XElement("Field",
new XElement("Type", ...),
new XElement("Variable Name", ...),
new XElement("Value", ...)));
因此,仅作为一般知识:
1.有没有办法只获取节点对其后代的引用,以便在较低的递归级别中我可以像上面那样执行另一个 root.Add(...) ,但此根将是对前一个根的孩子? (这意味着无需 Linq 语法即可完成整个操作)
2.我已经设法通过反射获取私有字段值,而不使用属性,这有问题吗?我应该始终通过反射中的属性获取值吗?