我是 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
Class 并到达Address
Class 并且想要“向下钻取”,所以我想用当前 Worker 类的子节点的正确引用调用我的递归方法作为新的 XElement 根,所以我将能够在下面的Address
第一类递归深度中添加我通过反射找到的内容。
请注意,此引用应为 XElement 类型。
我怎样才能做到这一点?
编辑:如果你对做所有这些事情有另一个想法,但XElement
我也很乐意听到,尽管我更喜欢XElement
参数。
另一个问题:
我已经开始以一种天真的方式实现它,例如遍历所有字段(FieldInfo [] 的变量),如果遇到值类型(IsValueType),我正在做类似的事情
root.Add(new XElement("Field",
new XElement("Type", ...),
new XElement("Variable Name", ...),
new XElement("Value", ...)));
所以,只是为了一般知识:
1.有没有办法只获得一个节点对其后代的引用,这样在较低的递归级别我就可以像上面一样做另一个 root.Add(...) 但是这个根将是对前一个根的孩子的引用?(这意味着在没有 Linq 语法的情况下进行整个操作)
2.我已经设法通过反射获得私有字段值而不使用属性,这有问题吗?我应该总是通过反射中的属性来获取值吗?