Это пропуск строк, когда reader.ReadString()
перемещает курсор вперед. reader.Value
пусто.
Как я могу прочитать этот XML в List<LogData> logDatas = new List<LogData>();
?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Xml;
using System.IO;
namespace ReadXML
{
class Program
{
private static string XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + Environment.NewLine +
"<log>" + Environment.NewLine +
" <logData id=\"Alpha\">" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>100</index>" + Environment.NewLine +
" <value>150</value>" + Environment.NewLine +
" </data>" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>110</index>" + Environment.NewLine +
" <value>750</value>" + Environment.NewLine +
" </data>" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>115</index>" + Environment.NewLine +
" <value>150</value>" + Environment.NewLine +
" </data>" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>110</index>" + Environment.NewLine +
" <value>750</value>" + Environment.NewLine +
" </data>" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>120</index>" + Environment.NewLine +
" <value>750</value>" + Environment.NewLine +
" </data>" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>130</index>" + Environment.NewLine +
" <value>150</value>" + Environment.NewLine +
" </data>" + Environment.NewLine +
" </logData>" + Environment.NewLine +
" <logData id=\"Bravo\">" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>100</index>" + Environment.NewLine +
" <value>25</value></data>" + Environment.NewLine +
" <data>" + Environment.NewLine +
" <index>110</index>" + Environment.NewLine +
" <value>11</value>" + Environment.NewLine +
" </data>" + Environment.NewLine +
" </logData>" + Environment.NewLine +
"</log>";
}
public static List<LogData> GetLogDatas(string xml)
{
List<LogData> logDatas = new List<LogData>();
string wasteFile = "wasteFile.xml";
File.WriteAllText(wasteFile, xml);
using (XmlReader reader = XmlReader.Create(wasteFile))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
Debug.WriteLine($"LocalName {reader.LocalName}");
if (reader.HasAttributes)
Debug.WriteLine($"Attribute: {reader.GetAttribute("id")}");
//Debug.WriteLine($"Value1 {reader.Value}"); //this is empty
Debug.WriteLine($"Value2 {reader.ReadString()}");
}
else
{
//Debug.WriteLine("not IsStartElement");
}
}
}
return logDatas;
}
}
public class LogData
{
public string ID { get; }
public List<LogPoint> LogPoints { get; } = new List<LogPoint>();
public LogData (string id)
{
ID = id;
}
}
public class LogPoint
{
public int Index { get; }
public double Value { get; }
public LogPoint ( int index, double value)
{
Index = index;
Value = value;
}
}
}