【发布时间】:2012-12-15 15:51:37
【问题描述】:
我是 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.我已经设法通过反射获得私有字段值而不使用属性,这有问题吗?我应该始终通过反射中的属性获取值吗?
【问题讨论】:
标签: c# xml linq reflection linq-to-xml