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

如何在C#中遍历XML子节点,不使用序列化类处理指定XML字符串?

在C#中遍历XML并按要求打印内容

没问题,我来给你一步步讲怎么实现,完全不用序列化类,纯遍历XML就能搞定,非常适合新手上手~

首先,你需要注意这个XML带有命名空间(http://library.org),这是关键,不处理的话会找不到对应的节点。下面是两种简单的实现方式,推荐用第一种LINQ to XML的写法,更简洁直观。

方法一:使用LINQ to XML(推荐)

先引用必要的命名空间:

using System;
using System.Linq;
using System.Xml.Linq;

然后编写核心代码,注释已经写得很清楚了:

// 假设这是你从Web服务获取到的XML字符串
string xmlResponse = @"<ArrayOfArrayOfString xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns=""http://library.org""> <ArrayOfString> <string>1</string> <string>Jack</string> <string>The Alchemist</string> </ArrayOfString> <ArrayOfString> <string>2</string> <string>Henry</string> <string>The Catcher In The Rye</string> </ArrayOfString> </ArrayOfArrayOfString>";

// 把XML字符串加载成XDocument对象
XDocument doc = XDocument.Parse(xmlResponse);

// 定义XML的命名空间,必须和XML里的xmlns属性值完全一致
XNamespace ns = "http://library.org";

// 遍历每一个ArrayOfString节点
foreach (var arrayNode in doc.Descendants(ns + "ArrayOfString"))
{
    // 取出当前节点下所有string子节点的内容,用空格拼接成一行
    string resultLine = string.Join(" ", arrayNode.Elements(ns + "string").Select(s => s.Value));
    
    // 打印拼接后的行
    Console.WriteLine(resultLine);
}

关键说明:

  • 命名空间:XML里的所有元素都属于http://library.org这个命名空间,所以查找节点时必须带上这个命名空间(ns + "节点名"),否则会找不到节点。
  • string.Join:用来把多个字符串拼接成一行,你可以把空格换成逗号、制表符等,比如string.Join(", ", ...)就能用逗号分隔内容。
  • Elements(ns + "string"):只查找当前ArrayOfString节点的直接子节点string,比Descendants更精准,效率也更高。

方法二:使用XmlDocument(传统DOM方式)

如果你更习惯用老的XmlDocument写法,也可以这样做:

using System;
using System.Xml;

// 同样是你的XML字符串
string xmlResponse = @"<ArrayOfArrayOfString xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns=""http://library.org""> <ArrayOfString> <string>1</string> <string>Jack</string> <string>The Alchemist</string> </ArrayOfString> <ArrayOfString> <string>2</string> <string>Henry</string> <string>The Catcher In The Rye</string> </ArrayOfString> </ArrayOfArrayOfString>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlResponse);

// 定义命名空间管理器,添加XML的命名空间
XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("lib", "http://library.org");

// 查找所有ArrayOfString节点
XmlNodeList arrayNodes = doc.SelectNodes("//lib:ArrayOfString", nsManager);

foreach (XmlNode arrayNode in arrayNodes)
{
    string line = "";
    // 遍历当前节点下的所有string子节点
    foreach (XmlNode stringNode in arrayNode.SelectNodes("lib:string", nsManager))
    {
        line += stringNode.InnerText + " ";
    }
    // 去掉末尾多余的空格,然后打印
    Console.WriteLine(line.Trim());
}

运行上面任意一段代码,都会输出:

1 Jack The Alchemist
2 Henry The Catcher In The Rye

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:23