/// <summary>
/// reads the xml file using elment based approach
/// </summary>
/// <param name="element">element to be read</param>
private void ReadElement(Element element)
{
//-----read all attributes
if (_reader.HasAttributes)
{
//-----add all the attributes
while (_reader.MoveToNextAttribute())
{
if (!element.Attributes.ContainsKey(_reader.Name))
{
element.Attributes.Add(_reader.Name, _reader.Value);
}
}
//-----invoke attribute callback
if (OnAttributesRead != null)
{
OnAttributesRead.Invoke(element);
}
_reader.MoveToElement();
}
//-----read elements content
if (!_reader.IsEmptyElement)
{
int depth = _reader.Depth;
while (_reader.Read())
{
//-----read child elements
if (_reader.NodeType == XmlNodeType.Element)
{
Element subElement = new Element()
{
Parent = element, Name = _reader.Name
};
ReadElement(subElement);
}
//-----read text content
else if (_reader.NodeType == XmlNodeType.Text)
{
element.Value = _reader.Value;
}
//-----end element reached, so break if its the current one
else if (_reader.NodeType == XmlNodeType.EndElement)
{
if (_reader.Depth == depth)
{
if (OnElementRead != null)
{
OnElementRead.Invoke(element);
}
break;
}
}
}
}
else if (OnElementRead != null)
{
OnElementRead.Invoke(element);
}
}