PI_Assync_PLD/Business/PLDProcessor.cs
Adriano Serighelli 751e7da3a6 Código funcional.
Consulta da data máxima de cada banco de dados realizada individualmente.
Dados sendo inseridos conforme a data máxima de cada banco de dados.
Pendente realizar paginação da requisição http.
2025-03-22 15:05:14 -03:00

45 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Xml;
using PI_Assync_PLD.Models;
public class PLDProcessor
{
public List<PLDModel> ProcessarXML(string xml)
{
List<PLDModel> pldList = new List<PLDModel>();
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bm", "http://xmlns.energia.org.br/BM/v1");
nsmgr.AddNamespace("bo", "http://xmlns.energia.org.br/BO/v1");
nsmgr.AddNamespace("hdr", "http://xmlns.energia.org.br/MH/v1");
nsmgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope");
nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
foreach (XmlNode pldNode in doc.SelectNodes("//bm:plds//bm:pld", nsmgr))
{
DateTime data = DateTime.ParseExact(
pldNode.SelectSingleNode("bo:vigencia//bo:inicio", nsmgr).InnerText,
"yyyy-MM-dd'T'HH:mm:ss'-03:00'", null
);
DateTime dia = data.Date;
int hora = data.Hour + 1;
string mes = data.ToString("yyMM");
int diaSemana = (int)data.DayOfWeek == 0 ? 7 : (int)data.DayOfWeek;
foreach (XmlNode valorNode in pldNode.SelectNodes("bo:valores/bo:valor", nsmgr))
{
string submercado = valorNode.SelectSingleNode("bo:submercado//bo:nome", nsmgr).InnerText;
double valor = double.Parse(valorNode.SelectSingleNode("bo:valor//bo:valor", nsmgr).InnerText, new CultureInfo("en-US"));
pldList.Add(new PLDModel(dia, hora, submercado, valor, mes, diaSemana));
}
}
return pldList;
}
}