简体   繁体   English

如果值增加阈值,则读取XML的特定元素

[英]Reading particular element of XML if value increase the threshold

I can read an XML file named 101.xml in which I can read element named light having two values say 1280 and 128, I can display it. 我可以读取一个名为101.xml的XML文件,在其中可以读取名为light的元素,该元素具有两个值1280和128,可以显示它。 But I want to display only that value which is greater than 800. Check image for XML file. 但是我只想显示大于800的值。检查图像中的XML文件。

1个

This is what I did to read both light elements in Listbox: 这是我阅读列表框中的两个轻元素的方法:

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);
        }

This is very bad xml format. 这是非常糟糕的xml格式。 Recommend changing. 建议更改。 Here is code to parse xml 这是解析xml的代码

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

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<XElement> parsedDataElements = doc.Descendants("ParsedDataElement").ToList();

            for (int i = 0; i < parsedDataElements.Count; i += 2)
            {
                DataElement newDataElement = new DataElement();
                DataElement.elements.Add(newDataElement);

                newDataElement.temperature = (double)parsedDataElements[i].Element("ConvertedValue");
                newDataElement.light = (int)parsedDataElements[i + 1].Element("ConvertedValue");
            }
        }
    }
    public class DataElement
    {
        public static List<DataElement> elements = new List<DataElement>();

        public double temperature { get; set; }
        public int light { get; set; }
    }
}

As i mentioned in the comment to the question, you can use XDocument class together with Linq query to filter xml data. 正如我在问题注释中提到的那样,您可以将XDocument类与Linq查询一起使用以过滤xml数据。

See: 看到:

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();

Now, you are able to insert data into ListBox object by using foreach loop or by setting DataSource . 现在,您可以通过使用foreach循环或通过设置DataSource将数据插入到ListBox对象中。

For further details, please see: 有关更多详细信息,请参见:
Basic Queries (LINQ to XML) (C#) 基本查询(LINQ to XML)(C#)
How to: Bind a Windows Forms ComboBox or ListBox Control to Data 如何:将Windows Forms ComboBox或ListBox控件绑定到数据

Good luck! 祝好运!

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

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