需要读取XML文件元素并在C#中进行比较 [英] Need to read XML file element and compare in C#

查看:55
本文介绍了需要读取XML文件元素并在C#中进行比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<?xml version =1.0?>< MotePacket>< ParsedDataElement><名称> amtype< /名称>< ConvertedValue> 11< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> NODEID< /名称>< ConvertedValue→1< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称>的父< /名称>< ConvertedValue大于0< / ConvertedValue> ;< / ParsedDataElement>< ParsedDataElement><名称>基团LT; /名称>< ConvertedValue> 125℃; / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> socketid< /名称>< ConvertedValue> 51 LT; / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> board_id< /名称>< ConvertedValue> 132< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> packet_id< /名称> < ConvertedValue> 129< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><姓名&克吨;电压< /名称>< ConvertedValue> 2636< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称>温度< /名称>< ConvertedValue> 25.519222< / ConvertedValue>< / ParsedDataElement>< ; ParsedDataElement><名称>光< /名称>< ConvertedValue> 1543< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> MIC< /名称>< ConvertedValue> 313< / ConvertedValue>< /ParsedDataElement><ParsedDataElement><Name>accel_x</Name><ConvertedValue>-1660.000000</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>accel_y</Name><ConvertedValue>960.000000 < / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> mag_x< /名称>< ConvertedValue> 30.790493< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> mag_y< /名称> ;< ConvertedValue> 30.790493< /转换器具dValue>< / ParsedDataElement>< / MotePacket> 

<?xml version =1.0?>< MotePacket>< ParsedDataElement><名称> amtype< /名称>< ConvertedValue> 11< / ConvertedValue>< / ParsedDataElement> ;< ParsedDataElement><名称> NODEID< /名称>< ConvertedValue→1< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称>的父< /名称>< ConvertedValue大于0< / ConvertedValue> < / ParsedDataElement>< ParsedDataElement><名称>基团LT; /名称>< ConvertedValue> 125℃; / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> socketid< /名称>< ConvertedValue> 51< ; / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> board_id< /名称>< ConvertedValue> 132< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> packet_id< /名称>< ; ConvertedValue> 129< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称>电压< /名称>< ConvertedValue> 2614< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称>温度< /名称>< ConvertedValue> 22.881853< / ConvertedValue>< / ParsedDataElement>< ; ParsedDataElement><名称>光< /名称>< ConvertedValue> 1983< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> MIC< /名称>< ConvertedValue> 285< / ConvertedValue>< /ParsedDataElement><ParsedDataElement><Name>accel_x</Name><ConvertedValue>-80.000000</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>accel_y</Name><ConvertedValue>520.000000 < / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> mag_x< /名称>< ConvertedValue> 30.925539< / ConvertedValue>< / ParsedDataElement>< ParsedDataElement><名称> mag_y< /名称> ;< ConvertedValue> 30.790493< /转换器具dValue>< / ParsedDataElement>< / MotePacket>





以上是我附加到其中的两个xml文件。另一部分是读取元素名称light及其转换值。我可以读取一个光值及其转换值。下面是代码。但进一步的任务是比较光值。在上面的文件中有两个不同的值,一个是1543和其他id 1983.我想要的是,如果灯增加1600的限制,它应该在我的文本框中给出一个警报文本。请提出一些建议。这是我项目的最后一步。



我尝试过:



使用System; 
使用System.Collections.Generic;使用System.ComponentModel
;
使用System.Data;使用System.Drawing
;
使用System.Linq;
使用System.Text;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用System.Xml;
使用System.Xml.XPath;

名称空间read_xml_elements
{
public partial class Form1:Form
{
public Form1()
{
InitializeComponent() ;

XmlTextReader Reader = new XmlTextReader(C:\\ Memsic \\cygwin \\\\\\\\\\\\\\\\\\\\\
XmlDocument doc = new XmlDocument();
doc.Load(读者);
XPathNavigator nav = doc.CreateNavigator();

//编译xpath
XPathExpression expr;

expr = nav.Compile(/ MotePacket / ParsedDataElement / [Name ='light']);

XPathNodeIterator iterator = nav.Select(expr);

//迭代节点集
listBox1.Items.Clear();
try
{
while(iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();
listBox1.Items.Add(Name:+ nav2.Value);
}
}
catch(exception ex)
{
Console.WriteLine(ex.Message);
}


}
}
}

解决方案

< blockquote>这样的事情:



 使用 System.Collections.Generic ; 
使用 System.Diagnostics;
使用 System.Linq;
使用 System.Windows.Forms;
使用 System.Xml.Linq;
...

XElement _x = XElement.Load( @ 22。 xml的);

var lightElements = 来自页面 in _x.Elements( ParsedDataElement
where page.Element( Name)。Value = = light
选择页面;

foreach var item in lightElements)
{
listBox1.Items.Add(item.Element( ConvertedValue)值)。
}


<?xml version="1.0" ?><MotePacket><ParsedDataElement><Name>amtype</Name><ConvertedValue>11</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>nodeid</Name><ConvertedValue>1</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>parent</Name><ConvertedValue>0</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>group</Name><ConvertedValue>125</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>socketid</Name><ConvertedValue>51</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>board_id</Name><ConvertedValue>132</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>packet_id</Name><ConvertedValue>129</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>voltage</Name><ConvertedValue>2636</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>temp</Name><ConvertedValue>25.519222</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>light</Name><ConvertedValue>1543</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>mic</Name><ConvertedValue>313</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>accel_x</Name><ConvertedValue>-1660.000000</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>accel_y</Name><ConvertedValue>960.000000</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>mag_x</Name><ConvertedValue>30.790493</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>mag_y</Name><ConvertedValue>30.790493</ConvertedValue></ParsedDataElement></MotePacket>

<?xml version="1.0" ?><MotePacket><ParsedDataElement><Name>amtype</Name><ConvertedValue>11</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>nodeid</Name><ConvertedValue>1</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>parent</Name><ConvertedValue>0</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>group</Name><ConvertedValue>125</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>socketid</Name><ConvertedValue>51</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>board_id</Name><ConvertedValue>132</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>packet_id</Name><ConvertedValue>129</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>voltage</Name><ConvertedValue>2614</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>temp</Name><ConvertedValue>22.881853</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>light</Name><ConvertedValue>1983</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>mic</Name><ConvertedValue>285</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>accel_x</Name><ConvertedValue>-80.000000</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>accel_y</Name><ConvertedValue>520.000000</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>mag_x</Name><ConvertedValue>30.925539</ConvertedValue></ParsedDataElement><ParsedDataElement><Name>mag_y</Name><ConvertedValue>30.790493</ConvertedValue></ParsedDataElement></MotePacket>



above are two xml files that i have append to one. the another part is to read the element name "light " and its converted values. i can read one light value along with its converted value. below is the code. but further task is to compare light values. in above file there are two differnt values for light one is 1543 and other id 1983. wht i want is that if the light increase the limit of 1600 it should give an alert text in my text box. plz suggest something. its last step of my project.

What I have tried:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.XPath;

namespace read_xml_elements
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
          
            XmlTextReader Reader = new XmlTextReader("C:\\Memsic\\cygwin\\home\\admin\\22.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
            listBox1.Items.Clear();
            try
            {
                while (iterator.MoveNext())
                {
                    XPathNavigator nav2 = iterator.Current.Clone();
                    listBox1.Items.Add("Name: " + nav2.Value);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            
        }
    }
}

解决方案

Something like this:

using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;
...

XElement _x = XElement.Load(@"22.xml");

	var lightElements = from page in _x.Elements("ParsedDataElement")
			where page.Element("Name").Value == "light"
			select page;

	foreach (var item in lightElements)
	{
		listBox1.Items.Add(item.Element("ConvertedValue").Value);
	}


这篇关于需要读取XML文件元素并在C#中进行比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆