将多个XML文件读入XML类结构

时间:2018-07-05 09:02:36

标签: c# xml serialization

在给定由文件名组成的字符串列表的情况下,我想将多个XML文件读取并反序列化为XML类结构。 显然,在读取一个xml文件时,您可以像这样进行操作:

XmlRoot file = null;
XmlSerializer ser = new XmlSerializer(typeof(XmlRoot));
using (XmlReader read = XmlReader.Create(FileName))
{
    file = (XmlRoot)ser.Deserialize(read);
{

哪个会将XML文件反序列化为类结构?

不可能有一个带有文件名的列表,并使用foreach循环对其进行遍历,逐个读取和反序列化,因为从理论上讲,它将导致在类结构中读取,反序列化和复制多个根元素。

因此,一般而言,我想反序列化每个文件,并将所需的主元素附加到根对象。

有人知道如何做到这一点吗?会很有帮助的。

谢谢!

PS:不好意思,因为我不是母语人士。如果您需要更多信息,请告诉我!

1 个答案:

答案 0 :(得分:0)

我设法自己解决了这个问题。 首先,我为读取的第一个文件创建了一个XDocument,然后遍历其他文档,为每个xml文件创建了一个新的XDocument,并尝试获取根之后的元素(以我的情况为Language)并将其添加到XDocument是在循环外部创建的。

        XDocument lDoc = new XDocument();
        int counter = 0;
        foreach (var fileName in multipleFileNames)
        {
            try
            {
                counter++;
                if (lCounter <= 1)
                {
                    doc = XDocument.Load(fileName);
                }
                else
                {
                    XDocument doc2 = XDocument.Load(fileName);
                    IEnumerable<XElement> elements = doc2.Element("Language")
                        .Elements();

                    doc.Root.Add(elements);
                }
            }
            return Deserialize(lDoc);

然后,我调用Deserialize方法,像这样反序列化我创建的XDocument:

    public static XmlLanguage Deserialize(XDocument doc)
    {
        XmlSerializer ser = new XmlSerializer(typeof(XmlLanguage));
        return (XmlLanguage)ser.Deserialize(doc.CreateReader());
    }