Hi,
i'm using linq to load an xml structure into my classes. the xml consists of
the same node nested for multiple levels e.g.
<node id="node_id01" name="node 01">
<node id="node_id0101" name="node 01 01">
<node id="node_id010101" name="node 01 01 01">
<node id="node_id01010101" name="node 01 01 01 01">
<node id="node_id0101010101" name="node 01 01 01 01 01">
</node>
</node>
</node>
</node>
</node>
The class consits of the properties which map to the xml attributes and has
a children property and a parent property.
Using recursion i am able to constract the class tree from parent to
children, however i'm not able to link up the parent with the children.
the code i'm using is as follows:
private List<NodeClass> GetNodes(XElement xmlelement, bool enabledOnly, int
level )
{
level++;
var elementsQuery = from element in xmlelement.Elements("node")
select new NodeClass{
Id = element.Attribute("id").Value,
Name =
element.Attribute("name").Value,
Level = level,
//Parent = ?????
Children = GetNodes(element,
enabledOnly, level)
};
return elementsQuery.ToList();
}
the parent property is of type NodeClass and i'd like it to be the parent of
the child node or null when level is 0. any suggestments please?
Martin Honnen - 26 Jan 2008 14:32 GMT
> The class consits of the properties which map to the xml attributes and has
> a children property and a parent property.
[quoted text clipped - 22 lines]
> the parent property is of type NodeClass and i'd like it to be the parent of
> the child node or null when level is 0. any suggestments please?
Well you need to pass the parent NodeClass instance to that method e.g.
class NodeClass
{
public string Id { get; set; }
public string Name { get; set; }
public int Level { get; set; }
public NodeClass Parent { get; set; }
public List<NodeClass> Children { get; set; }
NodeClass() { }
public NodeClass(XElement nodeElement)
{
Id = nodeElement.Attribute("id").Value;
Name = nodeElement.Attribute("name").Value;
Level = 0;
Parent = null;
Children = GetNodes(nodeElement, Level, this);
}
private List<NodeClass> GetNodes(XElement nodeElement, int
level, NodeClass parent)
{
level++;
var elementsQuery =
from childElement in nodeElement.Elements("node")
select new NodeClass {
Id = childElement.Attribute("id").Value,
Name = childElement.Attribute("name").Value,
Level = level,
Parent = parent,
Children = GetNodes(childElement, level, this)
};
return elementsQuery.ToList();
}
}

Signature
Martin Honnen --- MVP XML
http://JavaScript.FAQTs.com/