2016-10-18 1 views
0

J'ai l'exemple xml suivant et j'essaye de désérialiser le xml pour obtenir la valeur du tableau d'éléments xml (l'élément "READING"), pour obtenir le " 22,9 "valeur ci-dessous (c'est difficile à expliquer).C# .net xml sérialisation récupération de valeur de tableau d'éléments xml

Je peux obtenir toutes les autres valeurs en utilisant XmlSerializer.

Exemple 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> 

ce que je pourrais s'il vous plaît obtenir de l'aide pour cela?

Merci

+0

S'il vous plaît partager votre code, sinon il est vraiment difficile pour nous de comprendre ce que vous essayez de faire – derape

+0

Désolé, le formatter code ne fonctionne pas ... –

+0

S'il vous plaît fournir le code ce que vous ont essayé jusqu'ici. Jetez également un oeil à http://stackoverflow.com/help/how-to-ask – derape

Répondre

0
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; } 
    } 
+0

Merci, XmlText était-il - simple. –