Как прочитать все теги XML-файла
У меня есть консольная программа, которая читает XML-файл и печатает некоторое выбранное значение в консоли. Когда я запускаю программу, я получаю исключение внутри исключения 1:
InvalidOperationException: <export_header xmlns="http://www.siriusfs.com/SFI/Export/GL_Export/20051005"> не ожидалось. для тега заголовка в файле. HResult=0x80131509
Сообщение=в XML - документе есть ошибка (2, 2).
Source=System.Xml
Мой сгенерированный класс выглядит следующим образом :
[XmlRoot(ElementName = "TRANSACTION")] public class TRANSACTION { public string Correspondence_country { get; set; } [XmlAttribute(AttributeName = "term")] public string Term { get; set; } [XmlAttribute(AttributeName = "mediatype_code")] public string mediatype_code { get; set; } } [XmlRoot(ElementName = "ContractData")] public class ContractData { [XmlElement(ElementName = "TRANSACTION")] public List<TRANSACTION> TRANSACTION { get; set; } }
Программы.в CS
static void Main(string[] args) { Console.WriteLine("\n" + "Reading BidAskCurves XML File"); Console.WriteLine("==========================================================="); //get filename string fileName = @"C:\Users\tshumae\Documents\MyProjects\SSPPureSunSystems\Files\GLExport58oct.xml"; string path = @"C:\Users\tshumae\Documents\MyProjects\SSPPureSunSystems\Files\"; string result; result = Path.GetFileName(fileName); // Create an instance of the XmlSerializer. XmlSerializer serializer = new XmlSerializer(typeof(ContractData)); // Declare an object variable of the type to be deserialized. ContractData item; using (XmlReader reader = XmlReader.Create(fileName)) { // Call the Deserialize method to restore the object's state. item = (ContractData)serializer.Deserialize(reader); //Write out the properties of the object. (Visual Only, not needed) Console.Write( item.TRANSACTION[0].Term + "\t" + item.TRANSACTION[0].mediatype_code + "\t" ); }
И XML-схема, как показано ниже :
<?xml version="1.0" encoding="utf-16"?> <EXPORT_HEADER xmlns="http://www.siriusfs.com/SFI/Export/GL_Export/20051005" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.siriusfs.com/SFI/Export/GL_Export/20051005 GL_EXPORT.xsd" date_exported="2019-11-04T08:33:22.697" interface_name="GL_EXPORT" batch_id="212" batch_reference="GLX212" total_transactions="6109" total_amount="0.0000"> <TRANSACTION mediatype_code="Zimbabwe" term="NB" /> </TRANSACTION> </EXPORT_HEADER>
Любое понимание того, что я, возможно, делаю неправильно. В идеале программа должна вывести все значения.
Что я уже пробовал:
Я попытался украсить свою корневую сущность атрибутом XmlRoot . Программа работает нормально , но только 1 значение первой строки, первый столбец выводится на консоль :
[XmlRoot(ElementName = "TRANSACTION")] public class TRANSACTION { public string Term { get; set; } [XmlAttribute(AttributeName = "term")] public string Term { get; set; } [XmlAttribute(AttributeName = "mediatype_code")] public string mediatype_code { get; set; } } [XmlRoot(Namespace = "http://www.siriusfs.com/SFI/Export/GL_Export/20051005", ElementName = "EXPORT_HEADER", DataType = "string", IsNullable = true)] // [XmlRoot(ElementName = "ContractData")] //[XmlRoot(ElementName = "ContractData")] public class ContractData { [XmlElement(ElementName = "TRANSACTION")] public List<TRANSACTION> TRANSACTION { get; set; } }