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

如何用XmlReader的ReadToFollowing读取XML中Teacher与Student元素

同时读取XML中的Teacher和Student元素

你当前的代码只盯着查找Teacher元素,完全没处理Student,而且ReadToFollowing会直接跳转到指定名称的元素,跳过中间其他节点,自然没法同时捕获两种元素。

要在单次XmlReader实例中同时读取这两类元素,你可以通过遍历所有节点,判断元素名称来分别处理,具体代码如下:

using (XmlReader xmlReader = XmlReader.Create("school.xml"))
{
    while (xmlReader.Read())
    {
        // 只处理元素的开始节点
        if (xmlReader.NodeType == XmlNodeType.Element)
        {
            switch (xmlReader.Name)
            {
                case "Teacher":
                    Console.WriteLine("=== 教师信息 ===");
                    // 读取姓名
                    xmlReader.ReadToDescendant("Name");
                    Console.WriteLine($"姓名:{xmlReader.ReadElementContentAsString()}");
                    // 读取科目
                    xmlReader.ReadToFollowing("Subject");
                    Console.WriteLine($"科目:{xmlReader.ReadElementContentAsString()}");
                    break;
                case "Student":
                    Console.WriteLine("=== 学生信息 ===");
                    // 读取姓名
                    xmlReader.ReadToDescendant("Name");
                    Console.WriteLine($"姓名:{xmlReader.ReadElementContentAsString()}");
                    // 读取地址
                    xmlReader.ReadToFollowing("Address");
                    Console.WriteLine($"地址:{xmlReader.ReadElementContentAsString()}");
                    break;
            }
        }
    }
}

注意事项

  1. 你提供的XML原结构中,Teacher节点下的<Name>和<Subject>标签没有正确闭合(缺少</),实际运行时需要修正为合法的XML格式,否则XmlReader会抛出解析错误。
  2. Read()方法会逐个遍历XML中的所有节点(包括元素、文本、注释等),通过判断NodeType == XmlNodeType.Element可以过滤出元素的开始标签,避免处理无关节点。
  3. 针对不同元素的子节点,用ReadToDescendant或ReadToFollowing定位后,通过ReadElementContentAsString()直接读取元素内容,同时会自动跳过元素的结束标签,简化后续读取逻辑。

内容的提问来源于stack exchange,提问作者Gladstone Jaffrey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:22:47