如何使用C# XmlDocument动态获取XML子节点的属性名?
使用XmlDocument获取XML节点的属性与内部值
针对你给出的XML结构,用XmlDocument可以轻松获取每个<meas>节点的name属性值和内部文本值,具体实现如下:
完整代码示例
using System; using System.Xml; class Program { static void Main() { // 示例XML内容,实际场景可从文件/流加载 string xmlContent = @"<response location='location1'> <meas name='mt1'>14</meas> <meas name='mt2'>23</meas> <meas name='mt3'>65</meas> <meas name='mt4'>31</meas> <meas name='mt6'>32</meas> </response>"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlContent); // 用XPath定位所有<meas>节点 XmlNodeList measNodeList = xmlDoc.SelectNodes("//meas"); // 遍历每个节点,提取属性和内部值 foreach (XmlNode measNode in measNodeList) { // 安全获取name属性值(避免属性不存在引发空引用) string nameAttribute = measNode.Attributes["name"]?.Value; // 获取节点内部文本,Trim去除多余空白 string innerValue = measNode.InnerText.Trim(); if (!string.IsNullOrEmpty(nameAttribute)) { Console.WriteLine($"name属性: {nameAttribute}, 数值: {innerValue}"); } } } }
关键步骤说明
- 加载XML:使用
LoadXml()加载字符串形式的XML,若从文件读取则用Load("文件路径")。 - 定位节点:通过
SelectNodes("//meas")用XPath表达式匹配所有<meas>节点,//表示在整个文档范围内查找。 - 提取属性:通过
XmlNode.Attributes["属性名"]获取属性节点,?.Value是C#的空条件运算符,防止属性不存在时抛出异常。 - 获取内部值:
InnerText属性直接返回节点的文本内容,调用Trim()清理XML格式带来的换行和空格。
如果需要获取父节点<response>的location属性,只需访问xmlDoc.DocumentElement.Attributes["location"]?.Value即可。
内容的提问来源于stack exchange,提问作者bullfighter
相关产品推荐
相关产品推荐

