C#WPF显示未知格式的大型xml文件

问题描述

我正在尝试解析一个大小约为400KB的XML文件。但是我无法克服堆栈溢出异常。首先,我创建XmlReader并将其传递到XML文件。然后,我从XmlReader创建XElement。

enter image description here

这是我的代码:

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();
    }

}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...