Нужно прочитать элемент XML-файла и сравнить его на языке Си#
<?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>
выше приведены два xml-файла, которые я добавил к одному. другая часть состоит в том, чтобы прочитать имя элемента "light" и его преобразованные значения. я могу прочитать одно значение света вместе с его преобразованным значением. ниже приведен код. но дальнейшая задача-сравнить значения освещенности. в приведенном выше файле есть два разных значения для света: одно-1543, а другое-1983. что я хочу, так это то, что если свет увеличит предел 1600, он должен выдать предупреждающий текст в моем текстовом поле. пожалуйста, предложите что-нибудь. это последний шаг моего проекта.
Что я уже пробовал:
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); } } } }
George Swan
Когда вы объединили два xml-файла, вы продублировали оператор объявления и корневой элемент. Я предлагаю вам исправить это, удалив второй оператор объявления и добавив новый корневой элемент. Затем XPathExpression ". //ParsedDataElement [Name= 'light'] " должен позволить вам извлечь значения light.
g.bhangu
@George, я пробовал этот способ, и я знаю, что он работает только таким образом, но проблема в том, что я не могу объединить два xml-файла в один. поэтому я взял и загрузил два xml-файла в один, добавив его. поэтому, наконец, когда я открываю этот недавно сохраненный файл, он также берет корневые элементы и деклерации. итак, есть ли идея, как объединить два разных xmls, имеющих один и тот же корень и declearations в одном, который просто добавляет только элементы?