如何判断XML节点无值并仅提取有值的LoadRes节点值存入数组
Extract only non-empty
LoadRes XML node values in C# 需求:读取XML中的
LoadRes节点,仅当节点存在有效值时将其值存入数组。待解析的XML包含两个Signal节点,其中第一个的LoadRes有值400,第二个的LoadRes是空节点(无内容)。现有C#代码如下,但它会输出空节点的空内容,无法满足仅处理有值节点的需求:
XmlNodeList LoadResNodelist = doc.GetElementsByTagName("LoadRes"); foreach (XmlNode node in LoadResNodelist) { if (node != null) { Console.WriteLine(node.InnerXml); LoadNum[counterLoadNum] = node.InnerXml; counterLoadNum = counterLoadNum + 1; Console.WriteLine("counterLoadNum = {0}", counterLoadNum); } }请问如何修改代码,只提取有有效值的
LoadRes节点值?
没问题,你只需要在现有判断的基础上,增加对节点内容是否为空的检查就行。空的LoadRes节点(比如第二个Signal里的)的InnerXml是空字符串,所以我们可以用string.IsNullOrWhiteSpace()来过滤掉这些无效内容。
修改后的传统XmlDocument代码
XmlNodeList LoadResNodelist = doc.GetElementsByTagName("LoadRes"); foreach (XmlNode node in LoadResNodelist) { // 先判断节点不为null,再检查内容是否非空且不是空白字符 if (node != null && !string.IsNullOrWhiteSpace(node.InnerXml)) { Console.WriteLine(node.InnerXml); LoadNum[counterLoadNum] = node.InnerXml; counterLoadNum++; Console.WriteLine("counterLoadNum = {0}", counterLoadNum); } }
关键说明:
string.IsNullOrWhiteSpace()会同时检查字符串是否为null、空字符串""或者仅包含空白字符(比如空格、制表符),刚好能过滤掉那些没有有效值的空节点。- 这样修改后,只有第一个
Signal里的LoadRes(值为400)会被处理,第二个空的LoadRes会被直接跳过,完全符合你的需求。
更简洁的LINQ to XML方案(推荐)
如果你使用的是.NET Framework 3.5及以上版本,建议用LINQ to XML来实现,代码更简洁直观,还能避免手动维护计数器的麻烦:
XDocument xDoc = XDocument.Load("your-xml-file-path.xml"); // 直接提取所有非空的LoadRes节点值到数组 string[] loadResValues = xDoc.Descendants("LoadRes") .Where(x => !string.IsNullOrWhiteSpace(x.Value)) .Select(x => x.Value) .ToArray(); // 遍历结果示例 foreach (var value in loadResValues) { Console.WriteLine($"Valid LoadRes value: {value}"); }
内容的提问来源于stack exchange,提问作者meg
相关产品推荐
相关产品推荐

