C# WPF 显示未知格式的 xml 大文件
C# WPF Display large xml file of unknown format
我正在尝试解析大小约为 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();
}
}
我正在尝试解析大小约为 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();
}
}