简体   繁体   English

XML 节点数为 0 C#

[英]XML count of Nodes is 0 C#

I have some xml with the following C# code I try to read some tags values.我有一些 xml 和以下 C# 代码我尝试读取一些标签值。 But xmlNode count is 0, can't understand why.但是 xmlNode 计数为 0,不明白为什么。

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(@"C:\\myXmls\\new1.xml");

XmlNode root = xmlDocument.DocumentElement;
XmlNodeList xmlNode = root.SelectNodes("/config_set/measurement/setting");
foreach (XmlNode xn in xmlNode)
{
    string limit_high = xn["limit_high"].InnerText;
    string limit_low = xn["limit_low"].InnerText;
    Console.WriteLine("Name: {0} {1}", limit_high, limit_low);
}

Xml: Xml:

<Amp_config>
    <config_set name="myconfig1"    config_z = "FirstConfig">
        <measurement group="A1" measurement_pingroup="SYBER1">
            <setting>     
                <limit_high>0.00003719</limit_high>
                <limit_low>-0.000010</limit_low>          
            </setting>
        </measurement>  
        <measurement group="A2" measurement_pingroup="SYBER2">
            <setting>             
                <limit_high>0.00003712</limit_high>
                <limit_low>-0.000015</limit_low>                                
            </setting>
        </measurement>              
    </config_set>
    <config_set name="myconfig2"    config_z = "SecondConfig">
        <measurement group="A1" measurement_pingroup="SYBER1">
            <setting>                     
                <limit_high>0.00044</limit_high>
                <limit_low>-0.00078</limit_low>      
            </setting>
        </measurement>    
        <measurement group="A2" measurement_pingroup="SYBER2">
            <setting>             
                <limit_high>0.000565</limit_high>
                <limit_low>-0.00412</limit_low>                             
            </setting>
        </measurement>              
    </config_set>
</Amp_config>

Your xPath query is wrong.您的 xPath 查询错误。 The simpliest fix is this:最简单的修复是这样的:

XmlNodeList xmlNode = root.SelectNodes("//setting");

Or if you specify the full path of setting nodes then you will get the same result或者,如果您指定setting节点的完整路径,那么您将获得相同的结果

XmlNodeList xmlNode = root.SelectNodes("/Amp_config/config_set/measurement/setting");

Try xml linq:尝试 xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication40
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            List<Amp> amps = new List<Amp>();
            XDocument doc = XDocument.Load(FILENAME);

            foreach(XElement config_set in doc.Descendants("config_set"))
            {
                string name = (string)config_set.Attribute("name");
                string configZ = (string)config_set.Attribute("config_z");
                foreach(XElement measurement in config_set.Elements("measurement"))
                {
                    string group = (string)measurement.Attribute("group");
                    string pinGroup = (string)measurement.Attribute("measurement_pingroup");
                    decimal high = (decimal)config_set.Descendants("limit_high").FirstOrDefault();
                    decimal low = (decimal)config_set.Descendants("limit_low").FirstOrDefault();

                    Amp amp = new Amp() { name = name, configZ = configZ, group = group, pinGroup = pinGroup, high = high, low = low };
                    amps.Add(amp);
                }
            }

        }
    }
    public class Amp
    {
        public string name { get; set; }
        public string configZ { get; set; }
        public string group { get; set; } 
        public string pinGroup { get; set; }
        public decimal high { get; set; }
        public decimal low { get; set; }
    }
 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM