简体   繁体   English

c#.net xml序列化从xml元素数组中检索值

[英]c# .net xml serialization retrieving value from xml element array

I have the following example xml and I'm trying to deserialize the xml to get the value from the xml element array (the "READING" element), to get the "22.9" value below (it's hard to explain). 我有以下示例xml,但我试图对xml进行反序列化以从xml元素数组(“ READING”元素)中获取值,以获取下面的“ 22.9”值(这很难解释)。

I can get all the other values out using XmlSerializer. 我可以使用XmlSerializer获取所有其他值。

Example xml: 范例XML:

 <LIVE deviceid="1394602" utc="18-Oct-2016 01:22:28" local="18-Oct-2016 12:22:28">
       <READINGS type="full" probecount="1" portcount="2" discovery="2">
          <READING parameter="Temperature" shortparameter="Temp" unit="°C" channel="1" probeid="3" state="OK" probename="EC202" sensor="0">22.9</READING>
          <READING parameter="Ozone" shortparameter="O3" unit="ppm" channel="0" probeid="3" state="OK" probename="EC202" sensor="72">5</READING>
       </READINGS>
</LIVE>

Could I please get help for this? 我可以帮忙吗?

Thanks 谢谢

    class Program
    {
        static void Main(string[] args)
        {
            const string xml = @"<LIVE deviceid=""1394602"" utc=""18-Oct-2016 01:22:28"" local=""18-Oct-2016 12:22:28"">
       <READINGS type=""full"" probecount=""1"" portcount=""2"" discovery=""2"">
          <READING parameter=""Temperature"" shortparameter=""Temp"" unit=""°C"" channel=""1"" probeid=""3"" state=""OK"" probename=""EC202"" sensor=""0"">**22.9**   
          </READING>
       </READINGS>
</LIVE>";
            var serializer = new XmlSerializer(typeof(LIVE));
            using(var reader = new StringReader(xml))
            {
                var live = (LIVE)serializer.Deserialize(reader);
                var output = default(double);
                var text = Regex.Match(live.READINGS.READING.Text, @"\d+(\.\d+)?").Value;
                if (double.TryParse(text, out output))
                {
                    Console.WriteLine(output);
                }
            }
            Console.ReadLine();
        }

    }


    [XmlRoot(ElementName = "READING")]
    class READING
    {
        [XmlAttribute(AttributeName = "parameter")]
        public string Parameter { get; set; }
        [XmlAttribute(AttributeName = "shortparameter")]
        public string Shortparameter { get; set; }
        [XmlAttribute(AttributeName = "unit")]
        public string Unit { get; set; }
        [XmlAttribute(AttributeName = "channel")]
        public string Channel { get; set; }
        [XmlAttribute(AttributeName = "probeid")]
        public string Probeid { get; set; }
        [XmlAttribute(AttributeName = "state")]
        public string State { get; set; }
        [XmlAttribute(AttributeName = "probename")]
        public string Probename { get; set; }
        [XmlAttribute(AttributeName = "sensor")]
        public string Sensor { get; set; }
        [XmlText]
        public string Text { get; set; }
    }

    [XmlRoot(ElementName = "READINGS")]
    class READINGS
    {
        [XmlElement(ElementName = "READING")]
        public READING READING { get; set; }
        [XmlAttribute(AttributeName = "type")]
        public string Type { get; set; }
        [XmlAttribute(AttributeName = "probecount")]
        public string Probecount { get; set; }
        [XmlAttribute(AttributeName = "portcount")]
        public string Portcount { get; set; }
        [XmlAttribute(AttributeName = "discovery")]
        public string Discovery { get; set; }
    }

    [XmlRoot(ElementName = "LIVE")]
    class LIVE
    {
        [XmlElement(ElementName = "READINGS")]
        public READINGS READINGS { get; set; }
        [XmlAttribute(AttributeName = "deviceid")]
        public string Deviceid { get; set; }
        [XmlAttribute(AttributeName = "utc")]
        public string Utc { get; set; }
        [XmlAttribute(AttributeName = "local")]
        public string Local { get; set; }
    }

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

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