【问题标题】:c# .net xml serialization retrieving value from xml element arrayc# .net xml序列化从xml元素数组中检索值
【发布时间】:2016-10-18 07:06:52
【问题描述】:

我有以下示例 xml,我试图反序列化 xml 以从 xml 元素数组(“READING”元素)中获取值,以获取下面的“22.9”值(很难解释)。

我可以使用 XmlSerializer 获取所有其他值。

示例 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>

我能得到帮助吗?

谢谢

【问题讨论】:

  • 请分享你的代码,否则我们很难理解你在做什么
  • 对不起,代码格式化程序不起作用...
  • 请提供您迄今为止尝试过的代码。也看看stackoverflow.com/help/how-to-ask

标签: c# .net xml xmlserializer


【解决方案1】:
    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; }
    }

【讨论】:

  • 谢谢,XmlText 就是这样 - 很简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多