You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用反序列化将含多元素的XML加载至两个指定列表?

不使用反序列化加载XML中的和节点到对应列表

可以通过XmlReader(流式读取,适合大文件)或XDocument(DOM操作,直观便捷)两种方式手动解析XML节点,将数据存入指定静态列表,以下是具体实现:

方法一:使用XmlReader(流式解析)

XmlReader逐节点读取XML,内存占用低,适合处理大型XML文件:

// 先初始化静态列表
User.LoadUser = new List<User>();
Patient.LoadPatient = new List<Patient>();

// 替换为你的XML文件路径
using (XmlReader reader = XmlReader.Create("target.xml"))
{
    while (reader.Read())
    {
        // 解析<User>节点
        if (reader.NodeType == XmlNodeType.Element && reader.Name.Equals("User", StringComparison.Ordinal))
        {
            User user = new User();
            // 示例:读取节点属性(根据你的XML结构调整,若为子节点则改用ReadElementContentAsString等方法)
            if (reader.HasAttributes)
            {
                user.Id = int.TryParse(reader.GetAttribute("Id"), out var id) ? id : 0;
                user.Name = reader.GetAttribute("Name");
            }
            User.LoadUser.Add(user);
        }
        // 解析<Patient>节点
        else if (reader.NodeType == XmlNodeType.Element && reader.Name.Equals("Patient", StringComparison.Ordinal))
        {
            Patient patient = new Patient();
            patient.Id = int.TryParse(reader.GetAttribute("Id"), out var id) ? id : 0;
            patient.Diagnosis = reader.GetAttribute("Diagnosis");
            Patient.LoadPatient.Add(patient);
        }
    }
}

方法二:使用XDocument(DOM解析)

XDocument将整个XML加载到内存,操作更直观,适合中小规模XML文件:

// 初始化静态列表
User.LoadUser = new List<User>();
Patient.LoadPatient = new List<Patient>();

// 加载XML文件
XDocument doc = XDocument.Load("target.xml");

// 遍历所有<User>节点并转换为User实例
foreach (var userElem in doc.Descendants("User"))
{
    User user = new User()
    {
        Id = userElem.Attribute("Id") != null ? (int)userElem.Attribute("Id") : 0,
        Name = userElem.Attribute("Name")?.Value
        // 若为子节点:Name = userElem.Element("Name")?.Value
    };
    User.LoadUser.Add(user);
}

// 遍历所有<Patient>节点并转换为Patient实例
foreach (var patientElem in doc.Descendants("Patient"))
{
    Patient patient = new Patient()
    {
        Id = patientElem.Attribute("Id") != null ? (int)patientElem.Attribute("Id") : 0,
        Diagnosis = patientElem.Attribute("Diagnosis")?.Value
    };
    Patient.LoadPatient.Add(patient);
}

注意事项

  • 需根据你的XML实际结构调整读取逻辑:如果节点数据存储在子元素而非属性中,改用reader.ReadElementContentAsString()或userElem.Element("节点名")?.Value获取值。
  • 数据转换时建议添加空值判断(如int.TryParse、空值运算符?.),避免空引用或格式异常。
  • 确保XML文件路径正确,必要时添加IO异常捕获逻辑。

内容的提问来源于stack exchange,提问作者allen walker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:34:59