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

C#WPF显示未知格式的大型xml文件,c#,xml,parsing,stack-overflow,C#,Xml,Parsing,Stack Overflow,我试图解析一个大约400KB大小的XML文件。但我无法克服堆栈溢出异常。首先,我创建XmlReader并将其传递给XML文件。然后我从XmlReader创建XElement 这是我的代码: private ViewContent ParseToView(XElement xElement) { ViewContent viewContent = new ViewContent(); viewContent.elementName = xElement.Name.LocalName

我试图解析一个大约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;
}
私有视图内容解析视图(XElement XElement)
{
ViewContent ViewContent=新ViewContent();
viewContent.elementName=xElement.Name.LocalName;
foreach(xElement.Attributes()中的XAttribute项)
{
添加(新的ElementAttribute(item.Name.ToString(),item.Value));
}
foreach(XElement.Elements()中的XElement项)
{
viewContent.viewContents.Add(ParseToView(xElement));
}
返回新的ViewContent();
}
}
公共类视图内容
{
公共字符串elementName;
公共列表属性=新列表();
public List viewContents=新列表();
} 
公共类ElementAttribute
{
公共元素属性(字符串attributeName、字符串attributeValue)
{
this.attributeName=attributeName;
this.attributeValue=attributeValue;
}
公共字符串attributeName;
公共字符串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();
    }

}
私有视图内容解析视图(XElement XElement)
{
ViewContent ViewContent=新ViewContent();
viewContent.elementName=xElement.Name.LocalName;
foreach(xElement.Attributes()中的XAttribute项)
{
添加(新的ElementAttribute(item.Name.ToString(),item.Value));
}
foreach(XElement.Elements()中的XElement项)
{

viewContent.viewContents.Add(ParseToView(xElement));//您实际上不需要
ParseToView
——它不会解析任何东西,它只会将一种类型的类转换为另一种类型。因为您已经使用LINQ转换XML,所以可以使用LINQ从XElement数据生成ViewModel类。或者您可以直接绑定到数据。毕竟,ViewContent和ElementAttribute包含sa解析类所做的事情。为什么要复制数据?