问题描述
我正在尝试解析一个大小约为400KB的XML文件。但是我无法克服堆栈溢出异常。首先,我创建XmlReader并将其传递到XML文件。然后,我从XmlReader创建XElement。
这是我的代码:
private ViewContent ParseToView(XElement xElement)
{
ViewContent viewContent = new ViewContent();
viewContent.elementName = xElement.Name.LocalName;
foreach (XAttribute item in xElement.Attributes())
{
viewContent.attributes.Add(new ElementAttribute(item.Name.ToString(),item.Value));
}
foreach (XElement item in xElement.Elements())
{
viewContent.viewContents.Add(ParseToView(xElement));
}
return new ViewContent();
}
}
public class ViewContent
{
public string elementName;
public List<ElementAttribute> attributes = new List<ElementAttribute>();
public List<ViewContent> viewContents = new List<ViewContent>();
}
public class ElementAttribute
{
public ElementAttribute(string attributeName,string attributeValue)
{
this.attributeName = attributeName;
this.attributeValue = attributeValue;
}
public string attributeName;
public string attributeValue;
}
解决方法
在方法ParseToView
中,您递归调用相同的方法,但是使用相同的参数-viewContent.viewContents.Add(ParseToView(xElement));
进行调用-这会导致堆栈溢出:
viewContent.viewContents.Add(ParseToView(xElement));
应该是:
viewContent.viewContents.Add(ParseToView(item));
在方法中:
private ViewContent ParseToView(XElement xElement)
{
ViewContent viewContent = new ViewContent();
viewContent.elementName = xElement.Name.LocalName;
foreach (XAttribute item in xElement.Attributes())
{
viewContent.attributes.Add(new ElementAttribute(item.Name.ToString(),item.Value));
}
foreach (XElement item in xElement.Elements())
{
viewContent.viewContents.Add(ParseToView(xElement)); // <-Faulty line here
}
return new ViewContent();
}
}