Ошибка в документе xml (2,2) xmlns = '' "не ожидалась - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь десериализовать онлайн XML-файл и записать результаты в базу данных.Однако я получаю следующую ошибку:

"System.InvalidOperationException: 'В XML-документе (2, 2) обнаружена ошибка"

Внутреннее исключение

"InvalidOperationException: http://deutsche -boerse.com / dbag / app / open / xetra '> не ожидалось»

ниже мой код:

        class Program
        {
            public static void Main()
            {
                Program semoAPI = new Program();
    //Intraday Market Results
                using (WebClient webClient = new WebClient())
                {
                    WebClient n = new WebClient();

                    var json = n.DownloadString("https://reports.semopx.com/api/v1/documents/static-reports?" +
                    "page=1&page_size=1&order_by=ASC&ReportName=Intraday%20Market%20Results%20Order&Group=Market%20Data");

                    SemoReports semoReports = JsonConvert.DeserializeObject<SemoReports>(json);


                    Console.WriteLine("Intraday Market Results Report: ");
                    Console.WriteLine(semoReports.ResourceBaseUri + "/" + semoReports.Items[0].ResourceName);

                    string imrXML = semoReports.ResourceBaseUri + "/" + semoReports.Items[0].ResourceName;

                    XDocument document = XDocument.Load(imrXML);

                    semoAPI.DeserializeIntradayMarketResults(imrXML);
                }
            }


 //IntradayMarketResults to Database
    private void DeserializeIntradayMarketResults(string filename)
    {
        //Visual only not needed
        Console.WriteLine("\n" + "Reading IntradayMarketResults XML File");
        Console.WriteLine("===========================================================");



        // Create an instance of the XmlSerializer.
        XmlSerializer serializer = new XmlSerializer(typeof(IntradayMarketResults));

        // Declare an object variable of the type to be deserialized.
        IntradayMarketResults item;

        using (XmlReader reader = XmlReader.Create(filename))
        {
            // Call the Deserialize method to restore the object's state.
            item = (IntradayMarketResults)serializer.Deserialize(reader);

                //Write out the properties of the object. (Visual Only, not needed)
                Console.Write(
                   item.IMRReportHeader[0].exchNam + "\t" +
                   item.IMRReportHeader[0].envText + "\t" +
                   item.IMRReportHeader[0].rptCod + "\t" +
                   item.IMRReportHeader[0].rptName + "\t" +
                   item.IMRReportHeader[0].rptPrntEffDat + "\t" +
                   item.IMRReportHeader[0].rptPrntRunDat + "\n \n \n");

                //write the properties to the db 
                using (SEMOContext context = new SEMOContext())
                {
                    context.IntradayMarketResultsReports.Add(item);
                    context.SaveChanges();
                }
        }

Также вот как я настроил классы:

public class IntradayMarketResults
    {
        public IMRReportHeader[] IMRReportHeader { get; set; }
    }

[XmlRoot(ElementName = "rptHdr")]
    public class IMRReportHeader
    {
        [Key]
        public int RrportID { get; set; }
        public string exchNam { get; set; }
        public string envText { get; set; }
        public string rptCod { get; set; }
        public string rptName { get; set; }
        public string rptPrntEffDat { get; set; }
        public string rptPrntRunDat { get; set; }
    }

Что я пробовал:

Я пытался добавить следующее к классу

[Serializable, XmlRoot("tc540")]

Я также пытался:

[XmlRoot(ElementName = "tc540", DataType = "string", IsNullable = false)]

Также пытался добавить во время выполнения:

//Root error fix
            XmlRootAttribute xRoot = new XmlRootAttribute();
            xRoot.ElementName = "tc540";
            //xRoot.Namespace = "https://deutsche-boerse.com/dbag/app/open/xetra";
            xRoot.IsNullable = true;

XmlSerializer serializer = new XmlSerializer(typeof(IntradayMarketResults), xRoot);
* 1036И, наконец, я попытался:
 XmlSerializer serializer = new XmlSerializer(typeof(IntradayMarketResults), new XmlRootAttribute("tc540"));

Даже после попытки всех этих стимулов я все еще получаю то же сообщение об ошибке.

Ссылка на файл XML, который я пытаюсь десериализовать: https://reports.semopx.com/documents/IDC_OrderFile_20190331_20190401053002.xml

PS.Я знаю, что этот код работает так же, как и для более простого XML-файла из того же API.Также я знаю, что строки console.writeline не нужны, это было для визуальных целей при отладке.

Я просто не могу заставить его работать для более сложных файлов XML.

Ссылка на более простой XML-файл: https://reports.semopx.com/documents/ExchangeTransparencyData_NI-IDA3_20190401_20190401161901.xml

Спасибо за любую помощь заранее!

...