Пожалуйста, проверьте решение ниже для вашего случая:
1) Десериализовать объект WebAPI Xml в C # (скажем, События).
2) Из (События) объекта C # в требуемый формат xml с использованием xml Linq.
Нажмите здесь - для онлайн-исполнения
Шаг 1. Создайте класс для десериализации структуры входного XML.
public class Event
{
[XmlElement]
public string EventId { get; set; }
[XmlElement]
public string EventName { get; set; }
[XmlElement]
public string EventText { get; set; }
[XmlElement]
public string StartTime { get; set; }
[XmlElement]
public string Duration { get; set; }
[XmlElement]
public string Date { get; set; }
}
Шаг 2. Десериализовать XML-строку WebAPI в объект C # и переформатировать, используя xml linq.
string sXml = @"<EventInfo>
<Event>
<EventId>1</EventId>
<EventName>shedule-1</EventName>
<EventText>ch1 Channel Description</EventText>
<StartTime>00:00:00</StartTime>
<Duration>00:30:00</Duration>
<Date>20.06.2019</Date>
</Event>
</EventInfo>";
using (TextReader oReader = new StringReader(sXml))
{
// Deserialize Xml string to c# object
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Event>), new XmlRootAttribute("EventInfo"));
List<Event> lstEvents = (List<Event>)xmlSerializer.Deserialize(oReader);
if (lstEvents != null)
{
// Restructure the C# object to ROKU Xml Format using Xml Linq
XElement oResult = new XElement("Content", lstEvents.Select(t =>
new XElement("item",
new XAttribute("title", string.Format("{0} - {1} {2}", Convert.ToDateTime(t.StartTime).ToString("HH:mm"), Convert.ToDateTime(t.Duration).ToString("HH:mm"), t.EventName)),
new XAttribute("LIVE", "true"),
new XAttribute("streamformat", "mov"),
new XAttribute("description", t.EventName),
new XAttribute("realeasedate", t.Date),
new XAttribute("description-color", "0xC36419")
)));
// Saving the output as seperate xml file
oResult.Save("ROKU.xml");
}
else
{
Console.WriteLine("No Events Found");
}
}
}