我正在尝试将 xml 解析为对象的层次结构,但我不确定如何正确递归层次结构。我确实有一个粗略的解决方案(不是一个好的解决方案),即调用 GetChild 来解析 XElement 并返回一个集合。我希望有人知道如何在纯 linq 表达式中实现这一点,即。将 Parent-Child-Item 关系填充到 List 中,而无需调用内联函数,如 GetChild()
谢谢
var element = XElement.Parse(@"<Root RegisterVersion='1.0' xmlns='http://www.test.com.au/docs/schemas' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.test.com/docs/schemas/spin/surcharge http://www.test.com/docs/schemas/test.xsd'>
<Parent id='1' name='parent1'>
<Child id='1' name='child1'>
<Item id='1' name='someitem'></Item>
</Child>
</Parent>
<Parent id='2' name='parent2'>
<Child id='2' name='child2'>
<Item id='2' name='someotheritem'></Item>
</Child>
</Parent>
</Root>
");
XNamespace ns = element.Name.Namespace;
var list =
from compileItem in element.Elements (ns + "Parent")
select new Parent
{
Id = compileItem.Attribute("id").Value.ToString(),
Name = compileItem.Attribute("name").Value.ToString(),
children = GetChild(compileItem)
// this call here I'd like to replace with another linq select
};
public List<Child> GetChild(XElement frag)
{
//etc
}
public List<Item> GetItem(XElement frag)
{
//etc
}