Я хочу прочитать довольно большой XML-файл.Он достаточно мал, чтобы уместиться в памяти, но все же очень большой.При чтении XML он проверяется на соответствие XSD.Это, однако, не предотвращает бизнес-ошибок при использовании прочитанных данных для дальнейшей манипуляции в системе.Когда возникают такие бизнес-ошибки (после проверки XSD), я хочу иметь возможность описать номер строки и номер столбца для начальной и конечной позиции элемента из моего xml.Кроме того, в этом контексте было бы удобно показывать input xml в том виде, как он был прочитан из файла.
Использование xsd.exe Я сгенерировал код всех классов данных, и я прочитал xml, используя
using (var reader = new StringReader(content))
{
var errors = new List<string>();
var settings = new XmlReaderSettings();
settings.Schemas.Add("urn:import-schema", "Import.xsd");
settings.ValidationEventHandler += (o, args) => errors.Add(args.Message);
settings.ValidationType = ValidationType.Schema;
using (XmlReader xr = XmlReader.Create(reader, settings))
{
var xs = new XmlSerializer(typeof(ImportRoot));
var result = (ImportRoot) xs.Deserialize(xr);
if (errors.Any())
throw new Exception(string.Join("\n\n", errors));
return result;
}
}
}
Однако я не могу найтимета-информация, которую я ищу.Я также проверил класс XDocument
.Здесь элементы, кажется, имеют свойство Value
, которое является строкой.Но это еще не вся информация, которую я хочу показать.