一行中多个 xml 内的文件 xml

file xml inside multiple xml in one line

我在一行中有多个 xml 中的文件 .xml。 如何读取此文件并转换为对象? 我尝试使用此代码,如果只有一个,它就可以工作。 请帮忙,谢谢大家

[XmlRoot(ElementName = "DepartmentMaster")]
public class DepartmentMaster
{
    [XmlElement(ElementName = "DepartmentId")]
    public int DepartmentId { get; set; }

    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }

    [XmlElement(ElementName = "Description")]
    public string Description { get; set; }

    [XmlElement(ElementName = "test")]
    public int Test { get; set; }
}

//string xml = "<DepartmentMaster><DepartmentId>267854</DepartmentId><Name>Purchase</Name><Description>Purchase Department</Description><test>1</test></DepartmentMaster>";

 string xml = "<DepartmentMaster><DepartmentId>267854</DepartmentId><Name>Purchase</Name><Description>Purchase Department</Description><test>1</test></DepartmentMaster><DepartmentMaster><DepartmentId>267855</DepartmentId><Name>Purchase5</Name><Description>Purchase Department5</Description><test>5</test></DepartmentMaster>";

using (TextReader reader = new StringReader(xml))
{
    System.Xml.Serialization.XmlSerializer deserializer = new System.Xml.Serialization.XmlSerializer(typeof(DepartmentMaster));
    var model = (DepartmentMaster)deserializer.Deserialize(reader);
}

image from the database

image from the database

下面是两种方法。

第一个是使用设置来接受具有多个根元素 (ConformanceLevel.Fragment) 的 XML 数据。

private static IList<DepartmentMaster> DeserializeFragment(string xml)
{
    var settings = new XmlReaderSettings
    {
        ConformanceLevel = ConformanceLevel.Fragment
    };
    
    XmlReader reader = XmlReader.Create(new MemoryStream(Encoding.ASCII.GetBytes(xml)), settings);
    var serializer = new XmlSerializer(typeof(DepartmentMaster));
    
    var list = new List<DepartmentMaster>();
    while (serializer.Deserialize(reader) is DepartmentMaster element)
    {
        list.Add(element);
    }
    return list;
}

第二个是通过添加根元素来反序列化格式正确的 XML 文档。

public class DepartmentMasters
{
    [XmlElement("DepartmentMaster")]
    public List<DepartmentMaster> Items;
}

private static DepartmentMasters DeserializeWellFormedXML(string xml)
{
    var text = @"<?xml version=""1.0""?><DepartmentMasters>" + xml + "</DepartmentMasters>";
    var serializer = new XmlSerializer(typeof(DepartmentMasters));
    return (DepartmentMasters)serializer.Deserialize(new StringReader(text));
}