如何不使用反序列化将含多元素的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
相关产品推荐
相关产品推荐

