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

}