Click here to Skip to main content
15,889,034 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi , i have a problem related to xml file. i can read a xml file in my code and can also extract light element and its value as well (which i need).

but this show both light values. i need to display one having value greater than 800.
the xml is like :

XML
<?xml version="1.0" encoding="utf-8"?>
<MotePacket>
  <ParsedDataElement>
    <Name>temp</Name>
    <ConvertedValue>21.981619</ConvertedValue>
  </ParsedDataElement>
  <ParsedDataElement>
    <Name>light</Name>
    <ConvertedValue>2037</ConvertedValue>
  </ParsedDataElement>
  <ParsedDataElement>
      <Name>temp</Name>
      <ConvertedValue>23.127808</ConvertedValue>
  </ParsedDataElement>
  <ParsedDataElement>
     <Name>light</Name>
     <ConvertedValue>128</ConvertedValue>
  </ParsedDataElement>
</MotePacket>


What I have tried:

C#
// READING NEW FILE 
            XmlTextReader Reader = new XmlTextReader(@"101.xml");
            XmlDocument doc = new XmlDocument();
            doc.Load(Reader);
            XPathNavigator nav = doc.CreateNavigator();

            //compile xpath 
            XPathExpression expr;
            expr = nav.Compile("/MotePacket/ParsedDataElement[Name='light']");
            XPathNodeIterator iterator = nav.Select(expr);

            //iterate node set and see values in list box
            listBox1.Items.Clear();
            try
            {
                while (iterator.MoveNext())
                {
                    XPathNavigator nav2 = iterator.Current.Clone();
                    listBox1.Items.Add("content and value: " + nav2);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
Posted
Updated 27-Jun-17 20:39pm
v2

1 solution

The answer has been provided on SO board: c# - reading perticular element of xml if value increase the threshold - Stack Overflow[^]

C#
XDocument xdoc = XDocument.Load(fullfilename);

var data = xdoc.Descendants("ParsedDataElement")
    .Where(x=>x.Element("Name").Value == "light" && Double.Parse(x.Element("ConvertedValue").Value)>800)
    .Select(x=> new
    {
        Name =  x.Element("Name").Value,
        ConvertedValue = Double.Parse(x.Element("ConvertedValue").Value)
    })
    .ToList();

//load data into ListBox1 object
foreach(var item in data)
{
    ListBox1.Items.Add(item.ConvertedValue);
}
 
Share this answer
 
v2
Comments
Karthik_Mahalingam 28-Jun-17 2:44am    
5
Maciej Los 28-Jun-17 2:45am    
Thank you, Karthik.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900