从任何XML文件创建通用列表

时间:2014-02-13 15:04:24

标签: c# xml list generics

标题解释了大部分内容。我所做的可能不是最好的解决方案。我看到很多网站都说你应该知道XML文件的结构。但我的目标是这个。 我想创建一个c#函数,将XML信息读入列表。我想读取整个文件,无论结构如何,都要保存在内存中。

我已经构建了一些代码,它们遍及XML文件中的每个标记,并且可以正常工作。

private void Form1_Load(object sender, EventArgs e)
{
    XDocument file = XDocument.Load("file.xml");

    foreach (XElement element in file.Root.Elements())
    {
        text += element.Name + Environment.NewLine;


        if (element.HasElements)
            readElement(element);
    }

    MessageBox.Show(text);
    Application.Exit();
}

private void readElement(XElement element)
{
    IEnumerable<XElement> nodes = element.Elements();

    foreach (XElement el in nodes)
    {
        text += el.Name + Environment.NewLine;

        if (element.HasElements)
            readElement(el);
    }
}

所以我想说这个XML文件可以阅读:

<?xml version="1.0" encoding="UTF-8"?>
<parent>
    <element1>
        <element2>
            <element3></element3>
        </element2>
    </element1>
    <element4>
        <element5></element5>
    </element4>
    <element6>
        <element7>
            <element8>
                <element9></element9>
            </element8>
        </element7>
    </element6>
</parent>

就像我说的,我希望代码能够处理任何XML文件,无论结构如何。所以我的函数从root开始,这将是一个空列表,甚至不知道类型。由于它具有子元素,因此该列表将使用子元素在其中创建一个列表。之后,它会看到每个孩子并在其中创建一个列表,如果它也有子元素。

所以最后,我会在列表中列出列表,就像我的文件结构一样。这就是我现在卡住的地方,试图将这些列表属性添加到根列表中。 除此之外,我还想添加一个名为'Value'的属性,并输入'object'来将数据存储在标签内。

这可能有点让人理解并且可能无法做到,但我决定尝试,因为我找不到通用代码来读取互联网上的任何XML文件数据。

提前感谢您的帮助。 :)

1 个答案:

答案 0 :(得分:0)

首先,我可能会使用XmlReader,因为我认为如果您尝试阅读的文件是一个大文件,XDocument.Load会导致问题。

using (XmlReader reader = XmlReader.Create(@"file.xml"))
{
    while (reader.Read())
    {
       // Process each node (myReader.Value) here
    }
}

希望至少有所帮助...