如何使用C#提取XML文档中所有<SpecialCode>元素的文本内容?
简便的C#实现方案
当然有!在C#里提取XML树中任意位置的<SpecialCode>元素文本,最省心的方式就是利用LINQ to XML(基于XDocument的API),它能直接遍历整个XML结构找到所有目标元素,完全不用关心它们的层级位置。
方法一:LINQ to XML(推荐)
这种方法代码简洁,可读性高,是现代C#处理XML的首选方案:
using System.Xml.Linq; // 假设你的XML内容已经加载,或者可以从文件/流读取 string xmlContent = @"<Root> <Level1> <SpecialCode>SC001</SpecialCode> </Level1> <Level2> <Level3> <SpecialCode>SC002</SpecialCode> </Level3> </Level2> </Root>"; // 加载XML文档 XDocument doc = XDocument.Parse(xmlContent); // 提取所有<SpecialCode>的文本到字符串数组 string[] specialCodes = doc.Descendants("SpecialCode") .Select(element => element.Value.Trim()) // 可选:去除前后空白 .ToArray(); // 输出结果 foreach (var code in specialCodes) { Console.WriteLine(code); }
关键说明:
Descendants("SpecialCode"):会遍历XML树中所有层级的<SpecialCode>元素,不管它在根节点下多少层。element.Value:直接获取元素内部的文本内容。- 如果XML有命名空间,只需先定义命名空间再传入
Descendants:XNamespace ns = "http://your-namespace-uri"; string[] specialCodes = doc.Descendants(ns + "SpecialCode") .Select(e => e.Value.Trim()) .ToArray();
方法二:XmlDocument + XPath(兼容旧项目)
如果你维护的是较旧的项目,习惯用XmlDocument,可以结合XPath表达式//SpecialCode来匹配任意位置的元素:
using System.Xml; XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlContent); // 或从文件加载:doc.Load("your-file.xml"); // 使用XPath选择所有<SpecialCode>节点 XmlNodeList nodes = doc.SelectNodes("//SpecialCode"); // 转换为字符串数组 List<string> codeList = new List<string>(); foreach (XmlNode node in nodes) { codeList.Add(node.InnerText.Trim()); } string[] specialCodes = codeList.ToArray();
关键说明:
- XPath表达式
//SpecialCode的作用就是匹配XML文档中任意位置的<SpecialCode>元素。 - 如果XML有命名空间,需要先给
XmlNamespaceManager注册命名空间,再传入SelectNodes:XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable); nsMgr.AddNamespace("ns", "http://your-namespace-uri"); XmlNodeList nodes = doc.SelectNodes("//ns:SpecialCode", nsMgr);
这两种方法都能完美解决你的需求,其中LINQ to XML的写法更简洁,也更符合现代C#的编程风格,优先推荐使用~
内容的提问来源于stack exchange,提问作者Quantum_Kernel
相关产品推荐
相关产品推荐

